<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: Common components</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__common.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#files">文件</a> &#124;
<a href="#nested-classes">类</a> &#124;
<a href="#typedef-members">类型定义</a> &#124;
<a href="#enum-members">枚举</a> &#124;
<a href="#func-members">函数</a>  </div>
  <div class="headertitle">
<div class="title">Common components</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
文件</h2></td></tr>
<tr class="memitem:angles_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="angles_8h.html">angles.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:centroid_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="centroid_8h.html">centroid.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2common_2common_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2common_2common_8h.html">common.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2common_2distances_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2common_2distances_8h.html">distances.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2common_2file__io_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2common_2file__io_8h.html">file_io.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:random_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8h.html">random.h</a></td></tr>
<tr class="memdesc:random_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">CloudGenerator class generates a point cloud using some randoom number generator. Generators can be found in and easily extensible. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2common_2geometry_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2common_2geometry_8h.html">geometry.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:intersections_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="intersections_8h.html">intersections.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:norms_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="norms_8h.html">norms.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2common_2geometry_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2common_2geometry_8h.html">geometry.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2time_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2time_8h.html">time.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:common_2include_2pcl_2point__types_8h"><td class="memItemLeft" align="right" valign="top">文件 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="common_2include_2pcl_2point__types_8h.html">point_types.h</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
类</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_bivariate_polynomial_t.html">pcl::BivariatePolynomialT&lt; real &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This represents a bivariate polynomial and provides some functionality for it  <a href="classpcl_1_1_bivariate_polynomial_t.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_centroid_point.html">pcl::CentroidPoint&lt; PointT &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_nd_concatenate_functor.html">pcl::NdConcatenateFunctor&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper functor structure for concatenate.  <a href="structpcl_1_1_nd_concatenate_functor.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_histogram.html">pcl::FeatureHistogram</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type for histograms for computing mean and variance of some floats.  <a href="classpcl_1_1_feature_histogram.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_gaussian_kernel.html">pcl::GaussianKernel</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_a.html">pcl::PCA&lt; PointT &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_piecewise_linear_function.html">pcl::PiecewiseLinearFunction</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This provides functionalities to efficiently return values for piecewise linear function  <a href="classpcl_1_1_piecewise_linear_function.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_polynomial_calculations_t.html">pcl::PolynomialCalculationsT&lt; real &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This provides some functionality for polynomials, like finding roots or approximating bivariate polynomials  <a href="classpcl_1_1_polynomial_calculations_t.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_poses_from_matches.html">pcl::PosesFromMatches</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">calculate 3D transformation based on point correspondencdes  <a href="classpcl_1_1_poses_from_matches.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_stop_watch.html">pcl::StopWatch</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple stopwatch.  <a href="classpcl_1_1_stop_watch.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_scope_time.html">pcl::ScopeTime</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class to measure the time spent in a scope  <a href="classpcl_1_1_scope_time.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_event_frequency.html">pcl::EventFrequency</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A helper class to measure frequency of a certain event.  <a href="classpcl_1_1_event_frequency.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_time_trigger.html">pcl::TimeTrigger</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer class that invokes registered callback methods periodically.  <a href="classpcl_1_1_time_trigger.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_transformation_from_correspondences.html">pcl::TransformationFromCorrespondences</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates a transformation based on corresponding 3D points  <a href="classpcl_1_1_transformation_from_correspondences.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_vector_average.html">pcl::VectorAverage&lt; real, dimension &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the weighted average and the covariance matrix  <a href="classpcl_1_1_vector_average.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_correspondence.html">pcl::Correspondence</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structpcl_1_1_correspondence.html" title="Correspondence represents a match between two entities (e.g., points, descriptors,...">Correspondence</a> represents a match between two entities (e.g., points, descriptors, etc). This is represesented via the indices of a <em>source</em> point and a <em>target</em> point, and the distance between them.  <a href="structpcl_1_1_correspondence.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_correspondence3_d.html">pcl::PointCorrespondence3D</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Representation of a (possible) correspondence between two 3D points in two different coordinate frames (e.g. from feature matching)  <a href="structpcl_1_1_point_correspondence3_d.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_correspondence6_d.html">pcl::PointCorrespondence6D</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Representation of a (possible) correspondence between two points (e.g. from feature matching), that encode complete 6DOF transoformations.  <a href="structpcl_1_1_point_correspondence6_d.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates. (SSE friendly)  <a href="structpcl_1_1_point_x_y_z.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_intensity.html">pcl::Intensity</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the grayscale intensity in single-channel images. <a class="el" href="structpcl_1_1_intensity.html" title="A point structure representing the grayscale intensity in single-channel images. Intensity is represe...">Intensity</a> is represented as a float value.  <a href="structpcl_1_1_intensity.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_intensity8u.html">pcl::Intensity8u</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the grayscale intensity in single-channel images. <a class="el" href="structpcl_1_1_intensity.html" title="A point structure representing the grayscale intensity in single-channel images. Intensity is represe...">Intensity</a> is represented as a uint8_t value.  <a href="structpcl_1_1_intensity8u.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_intensity32u.html">pcl::Intensity32u</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the grayscale intensity in single-channel images. <a class="el" href="structpcl_1_1_intensity.html" title="A point structure representing the grayscale intensity in single-channel images. Intensity is represe...">Intensity</a> is represented as a uint8_t value.  <a href="structpcl_1_1_intensity32u.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1___point_x_y_z_i.html">pcl::_PointXYZI</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, and the intensity value.  <a href="structpcl_1_1___point_x_y_z_i.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, and the RGBA color.  <a href="structpcl_1_1_point_x_y_z_r_g_b_a.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b.html">pcl::PointXYZRGB</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, and the <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> color.  <a href="structpcl_1_1_point_x_y_z_r_g_b.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y.html">pcl::PointXY</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A 2D point structure representing Euclidean xy coordinates.  <a href="structpcl_1_1_point_x_y.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_u_v.html">pcl::PointUV</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A 2D point structure representing pixel image coordinates.  <a href="structpcl_1_1_point_u_v.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing an interest point with Euclidean xyz coordinates, and an interest value.  <a href="structpcl_1_1_interest_point.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_normal.html">pcl::Normal</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing normal coordinates and the surface curvature estimate. (SSE friendly)  <a href="structpcl_1_1_normal.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_axis.html">pcl::Axis</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing an <a class="el" href="structpcl_1_1_axis.html" title="A point structure representing an Axis using its normal coordinates. (SSE friendly)">Axis</a> using its normal coordinates. (SSE friendly)  <a href="structpcl_1_1_axis.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, together with normal coordinates and the surface curvature estimate. (SSE friendly)  <a href="structpcl_1_1_point_normal.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_normal.html">pcl::PointXYZRGBNormal</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, and the <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> color, together with normal coordinates and the surface curvature estimate. Due to historical reasons (PCL was first developed as a ROS package), the <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> information is packed into an integer and casted to a float. This is something we wish to remove in the near future, but in the meantime, the following code snippet should help you pack and unpack <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> colors in your <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b.html" title="A point structure representing Euclidean xyz coordinates, and the RGB color.">PointXYZRGB</a> structure:  <a href="structpcl_1_1_point_x_y_z_r_g_b_normal.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z_i_normal.html">pcl::PointXYZINormal</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, intensity, together with normal coordinates and the surface curvature estimate.  <a href="structpcl_1_1_point_x_y_z_i_normal.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_x_y_z_l_normal.html">pcl::PointXYZLNormal</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, a label, together with normal coordinates and the surface curvature estimate.  <a href="structpcl_1_1_point_x_y_z_l_normal.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_with_range.html">pcl::PointWithRange</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, padded with an extra range float.  <a href="structpcl_1_1_point_with_range.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_with_viewpoint.html">pcl::PointWithViewpoint</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates together with the viewpoint from which it was seen.  <a href="structpcl_1_1_point_with_viewpoint.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_moment_invariants.html">pcl::MomentInvariants</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the three moment invariants.  <a href="structpcl_1_1_moment_invariants.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_principal_radii_r_s_d.html">pcl::PrincipalRadiiRSD</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the minimum and maximum surface radii (in meters) computed using RSD.  <a href="structpcl_1_1_principal_radii_r_s_d.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_boundary.html">pcl::Boundary</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing a description of whether a point is lying on a surface boundary or not.  <a href="structpcl_1_1_boundary.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_principal_curvatures.html">pcl::PrincipalCurvatures</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the principal curvatures and their magnitudes.  <a href="structpcl_1_1_principal_curvatures.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_p_f_h_signature125.html">pcl::PFHSignature125</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Point <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> (PFH).  <a href="structpcl_1_1_p_f_h_signature125.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_p_f_h_r_g_b_signature250.html">pcl::PFHRGBSignature250</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Point <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> with colors (PFHRGB).  <a href="structpcl_1_1_p_f_h_r_g_b_signature250.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_p_p_f_signature.html">pcl::PPFSignature</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure for storing the Point Pair <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> (PPF) values  <a href="structpcl_1_1_p_p_f_signature.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_c_p_p_f_signature.html">pcl::CPPFSignature</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure for storing the Point Pair <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> (CPPF) values  <a href="structpcl_1_1_c_p_p_f_signature.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_p_p_f_r_g_b_signature.html">pcl::PPFRGBSignature</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure for storing the Point Pair Color <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> (PPFRGB) values  <a href="structpcl_1_1_p_p_f_r_g_b_signature.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_normal_based_signature12.html">pcl::NormalBasedSignature12</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the <a class="el" href="structpcl_1_1_normal.html" title="A point structure representing normal coordinates and the surface curvature estimate....">Normal</a> Based Signature for a feature matrix of 4-by-3  <a href="structpcl_1_1_normal_based_signature12.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_shape_context1980.html">pcl::ShapeContext1980</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing a Shape Context.  <a href="structpcl_1_1_shape_context1980.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_unique_shape_context1960.html">pcl::UniqueShapeContext1960</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing a Unique Shape Context.  <a href="structpcl_1_1_unique_shape_context1960.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_s_h_o_t352.html">pcl::SHOT352</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the generic Signature of Histograms of OrienTations (SHOT) - shape only.  <a href="structpcl_1_1_s_h_o_t352.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_s_h_o_t1344.html">pcl::SHOT1344</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the generic Signature of Histograms of OrienTations (SHOT) - shape+color.  <a href="structpcl_1_1_s_h_o_t1344.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1___reference_frame.html">pcl::_ReferenceFrame</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A structure representing the Local Reference Frame of a point.  <a href="structpcl_1_1___reference_frame.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_f_p_f_h_signature33.html">pcl::FPFHSignature33</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Fast Point <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> (FPFH).  <a href="structpcl_1_1_f_p_f_h_signature33.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_v_f_h_signature308.html">pcl::VFHSignature308</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Viewpoint <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> (VFH).  <a href="structpcl_1_1_v_f_h_signature308.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_g_r_s_d_signature21.html">pcl::GRSDSignature21</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Global Radius-based Surface Descriptor (GRSD).  <a href="structpcl_1_1_g_r_s_d_signature21.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_b_r_i_s_k_signature512.html">pcl::BRISKSignature512</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Binary Robust Invariant Scalable Keypoints (BRISK).  <a href="structpcl_1_1_b_r_i_s_k_signature512.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_e_s_f_signature640.html">pcl::ESFSignature640</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the Ensemble of Shape Functions (ESF).  <a href="structpcl_1_1_e_s_f_signature640.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_g_f_p_f_h_signature16.html">pcl::GFPFHSignature16</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the GFPFH descriptor with 16 bins.  <a href="structpcl_1_1_g_f_p_f_h_signature16.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_narf36.html">pcl::Narf36</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the <a class="el" href="classpcl_1_1_narf.html" title="NARF (Normal Aligned Radial Features) is a point feature descriptor type for 3D data....">Narf</a> descriptor.  <a href="structpcl_1_1_narf36.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_border_description.html">pcl::BorderDescription</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A structure to store if a point in a range image lies on a border between an obstacle and the background.  <a href="structpcl_1_1_border_description.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_intensity_gradient.html">pcl::IntensityGradient</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing the intensity gradient of an XYZI point cloud.  <a href="structpcl_1_1_intensity_gradient.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_histogram.html">pcl::Histogram&lt; N &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing an N-D histogram.  <a href="structpcl_1_1_histogram.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_with_scale.html">pcl::PointWithScale</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing a 3-D position and scale.  <a href="structpcl_1_1_point_with_scale.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_surfel.html">pcl::PointSurfel</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A surfel, that is, a point structure representing Euclidean xyz coordinates, together with normal coordinates, a RGBA color, a radius, a confidence value and the surface curvature estimate.  <a href="structpcl_1_1_point_surfel.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_point_d_e_m.html">pcl::PointDEM</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Digital Elevation Map.  <a href="structpcl_1_1_point_d_e_m.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointT &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">PCL base class. Implements methods that are used by most PCL algorithms.  <a href="classpcl_1_1_p_c_l_base.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1cuda_1_1_scope_time_c_p_u.html">pcl::cuda::ScopeTimeCPU</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class to measure the time spent in a scope  <a href="classpcl_1_1cuda_1_1_scope_time_c_p_u.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1solution__recorder.html">mets::solution_recorder</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The solution recorder is used by search algorithm, at the end of each iteration, to record the best seen solution.  <a href="classmets_1_1solution__recorder.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html">mets::abstract_search&lt; move_manager_type &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An abstract search.  <a href="classmets_1_1abstract__search.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1best__ever__solution.html">mets::best_ever_solution</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The best ever solution recorder can be used as a simple solution recorder that just records the best copyable solution found during its lifetime.  <a href="classmets_1_1best__ever__solution.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1search__listener.html">mets::search_listener&lt; move_manager_type &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An object that is called back during the search progress.  <a href="classmets_1_1search__listener.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmets_1_1iteration__logger.html">mets::iteration_logger&lt; neighborhood_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmets_1_1improvement__logger.html">mets::improvement_logger&lt; neighborhood_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1termination__criteria__chain.html">mets::termination_criteria_chain</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function object expressing a termination criteria  <a href="classmets_1_1termination__criteria__chain.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1iteration__termination__criteria.html">mets::iteration_termination_criteria</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Termination criteria based on the number of iterations.  <a href="classmets_1_1iteration__termination__criteria.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1noimprove__termination__criteria.html">mets::noimprove_termination_criteria</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Termination criteria based on the number of iterations without an improvement.  <a href="classmets_1_1noimprove__termination__criteria.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1threshold__termination__criteria.html">mets::threshold_termination_criteria</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Termination criteria based on cost value  <a href="classmets_1_1threshold__termination__criteria.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1forever.html">mets::forever</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_gradient_x_y.html">pcl::GradientXY</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A point structure representing Euclidean xyz coordinates, and the intensity value.  <a href="structpcl_1_1_gradient_x_y.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
类型定义</h2></td></tr>
<tr class="memitem:ga010a963efcb59df316596af2902fcb58"><td class="memItemLeft" align="right" valign="top"><a id="ga010a963efcb59df316596af2902fcb58"></a>
typedef std::bitset&lt; 32 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga010a963efcb59df316596af2902fcb58">pcl::BorderTraits</a></td></tr>
<tr class="memdesc:ga010a963efcb59df316596af2902fcb58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data type to store extended information about a transition from foreground to backgroundSpecification of the fields for BorderDescription::traits. <br /></td></tr>
<tr class="separator:ga010a963efcb59df316596af2902fcb58"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
枚举</h2></td></tr>
<tr class="memitem:ga9d37f00989a9de11b48deb263649463c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga9d37f00989a9de11b48deb263649463c">pcl::NormType</a> { <br />
&#160;&#160;<b>L1</b>
, <b>L2_SQR</b>
, <b>L2</b>
, <b>LINF</b>
, <br />
&#160;&#160;<b>JM</b>
, <b>B</b>
, <b>SUBLINEAR</b>
, <b>CS</b>
, <br />
&#160;&#160;<b>DIV</b>
, <b>PF</b>
, <b>K</b>
, <b>KL</b>
, <br />
&#160;&#160;<b>HIK</b>
<br />
 }</td></tr>
<tr class="memdesc:ga9d37f00989a9de11b48deb263649463c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enum that defines all the types of norms available.  <a href="group__common.html#ga9d37f00989a9de11b48deb263649463c">更多...</a><br /></td></tr>
<tr class="separator:ga9d37f00989a9de11b48deb263649463c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7b4e0dcfd710e4c96737e6012b318e8b"><td class="memItemLeft" align="right" valign="top"><a id="ga7b4e0dcfd710e4c96737e6012b318e8b"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga7b4e0dcfd710e4c96737e6012b318e8b">pcl::BorderTrait</a> { <br />
&#160;&#160;<b>BORDER_TRAIT__OBSTACLE_BORDER</b>
, <b>BORDER_TRAIT__SHADOW_BORDER</b>
, <b>BORDER_TRAIT__VEIL_POINT</b>
, <b>BORDER_TRAIT__SHADOW_BORDER_TOP</b>
, <br />
&#160;&#160;<b>BORDER_TRAIT__SHADOW_BORDER_RIGHT</b>
, <b>BORDER_TRAIT__SHADOW_BORDER_BOTTOM</b>
, <b>BORDER_TRAIT__SHADOW_BORDER_LEFT</b>
, <b>BORDER_TRAIT__OBSTACLE_BORDER_TOP</b>
, <br />
&#160;&#160;<b>BORDER_TRAIT__OBSTACLE_BORDER_RIGHT</b>
, <b>BORDER_TRAIT__OBSTACLE_BORDER_BOTTOM</b>
, <b>BORDER_TRAIT__OBSTACLE_BORDER_LEFT</b>
, <b>BORDER_TRAIT__VEIL_POINT_TOP</b>
, <br />
&#160;&#160;<b>BORDER_TRAIT__VEIL_POINT_RIGHT</b>
, <b>BORDER_TRAIT__VEIL_POINT_BOTTOM</b>
, <b>BORDER_TRAIT__VEIL_POINT_LEFT</b>
<br />
 }</td></tr>
<tr class="memdesc:ga7b4e0dcfd710e4c96737e6012b318e8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specification of the fields for BorderDescription::traits. <br /></td></tr>
<tr class="separator:ga7b4e0dcfd710e4c96737e6012b318e8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
函数</h2></td></tr>
<tr class="memitem:ga3177c2c084674693cc38f03e80b6ad77"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga3177c2c084674693cc38f03e80b6ad77">pcl::rad2deg</a> (float alpha)</td></tr>
<tr class="memdesc:ga3177c2c084674693cc38f03e80b6ad77"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert an angle from radians to degrees  <a href="group__common.html#ga3177c2c084674693cc38f03e80b6ad77">更多...</a><br /></td></tr>
<tr class="separator:ga3177c2c084674693cc38f03e80b6ad77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25b0ce695e2a10abb0130bcb5cf90eb6"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga25b0ce695e2a10abb0130bcb5cf90eb6">pcl::deg2rad</a> (float alpha)</td></tr>
<tr class="memdesc:ga25b0ce695e2a10abb0130bcb5cf90eb6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert an angle from degrees to radians  <a href="group__common.html#ga25b0ce695e2a10abb0130bcb5cf90eb6">更多...</a><br /></td></tr>
<tr class="separator:ga25b0ce695e2a10abb0130bcb5cf90eb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga997c583b8ac57ffa9ad9e7321b4673e5"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga997c583b8ac57ffa9ad9e7321b4673e5">pcl::rad2deg</a> (double alpha)</td></tr>
<tr class="memdesc:ga997c583b8ac57ffa9ad9e7321b4673e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert an angle from radians to degrees  <a href="group__common.html#ga997c583b8ac57ffa9ad9e7321b4673e5">更多...</a><br /></td></tr>
<tr class="separator:ga997c583b8ac57ffa9ad9e7321b4673e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga78fe9974ed54012d6cf057afda5d3350"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga78fe9974ed54012d6cf057afda5d3350">pcl::deg2rad</a> (double alpha)</td></tr>
<tr class="memdesc:ga78fe9974ed54012d6cf057afda5d3350"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert an angle from degrees to radians  <a href="group__common.html#ga78fe9974ed54012d6cf057afda5d3350">更多...</a><br /></td></tr>
<tr class="separator:ga78fe9974ed54012d6cf057afda5d3350"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3b37d5c19b2773954bbc5320f011f3ec"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga3b37d5c19b2773954bbc5320f011f3ec">pcl::normAngle</a> (float alpha)</td></tr>
<tr class="memdesc:ga3b37d5c19b2773954bbc5320f011f3ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normalize an angle to (-PI, PI]  <a href="group__common.html#ga3b37d5c19b2773954bbc5320f011f3ec">更多...</a><br /></td></tr>
<tr class="separator:ga3b37d5c19b2773954bbc5320f011f3ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf5729fae15603888b49743b118025290"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaf5729fae15603888b49743b118025290"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (<a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_iterator, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:gaf5729fae15603888b49743b118025290"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.  <a href="group__common.html#gaf5729fae15603888b49743b118025290">更多...</a><br /></td></tr>
<tr class="separator:gaf5729fae15603888b49743b118025290"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga26f5d53ac5362b04a5c8ed68c4c39038"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga26f5d53ac5362b04a5c8ed68c4c39038"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga26f5d53ac5362b04a5c8ed68c4c39038">pcl::compute3DCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:ga26f5d53ac5362b04a5c8ed68c4c39038"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.  <a href="group__common.html#ga26f5d53ac5362b04a5c8ed68c4c39038">更多...</a><br /></td></tr>
<tr class="separator:ga26f5d53ac5362b04a5c8ed68c4c39038"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaef1048c26d7ee3cad4ae9436d1f4a5d6"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaef1048c26d7ee3cad4ae9436d1f4a5d6"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaef1048c26d7ee3cad4ae9436d1f4a5d6">pcl::compute3DCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:gaef1048c26d7ee3cad4ae9436d1f4a5d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3D (X-Y-Z) centroid of a set of points using their indices and return it as a 3D vector.  <a href="group__common.html#gaef1048c26d7ee3cad4ae9436d1f4a5d6">更多...</a><br /></td></tr>
<tr class="separator:gaef1048c26d7ee3cad4ae9436d1f4a5d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga057c72764dfcd1276f7fe19bbfb380a7"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga057c72764dfcd1276f7fe19bbfb380a7"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga057c72764dfcd1276f7fe19bbfb380a7">pcl::compute3DCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:ga057c72764dfcd1276f7fe19bbfb380a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3D (X-Y-Z) centroid of a set of points using their indices and return it as a 3D vector.  <a href="group__common.html#ga057c72764dfcd1276f7fe19bbfb380a7">更多...</a><br /></td></tr>
<tr class="separator:ga057c72764dfcd1276f7fe19bbfb380a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac36b146ec26b1ceb7be43a9ecaa010c4"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gac36b146ec26b1ceb7be43a9ecaa010c4"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gac36b146ec26b1ceb7be43a9ecaa010c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3x3 covariance matrix of a given set of points. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix.  <a href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">更多...</a><br /></td></tr>
<tr class="separator:gac36b146ec26b1ceb7be43a9ecaa010c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab5ea605f439a80daf6348547379bad8e"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gab5ea605f439a80daf6348547379bad8e"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab5ea605f439a80daf6348547379bad8e">pcl::computeCovarianceMatrixNormalized</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gab5ea605f439a80daf6348547379bad8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute normalized the 3x3 covariance matrix of a given set of points. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of points in the point cloud. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function.  <a href="group__common.html#gab5ea605f439a80daf6348547379bad8e">更多...</a><br /></td></tr>
<tr class="separator:gab5ea605f439a80daf6348547379bad8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga73df83248bb8d4e74347822811be9359"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga73df83248bb8d4e74347822811be9359"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga73df83248bb8d4e74347822811be9359">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:ga73df83248bb8d4e74347822811be9359"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix.  <a href="group__common.html#ga73df83248bb8d4e74347822811be9359">更多...</a><br /></td></tr>
<tr class="separator:ga73df83248bb8d4e74347822811be9359"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga35305b1593d5417be615e940383f4ced"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga35305b1593d5417be615e940383f4ced"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga35305b1593d5417be615e940383f4ced">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:ga35305b1593d5417be615e940383f4ced"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix.  <a href="group__common.html#ga35305b1593d5417be615e940383f4ced">更多...</a><br /></td></tr>
<tr class="separator:ga35305b1593d5417be615e940383f4ced"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad8f6fde995ab21ab95267c22c7b12c90"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gad8f6fde995ab21ab95267c22c7b12c90"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gad8f6fde995ab21ab95267c22c7b12c90">pcl::computeCovarianceMatrixNormalized</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gad8f6fde995ab21ab95267c22c7b12c90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function.  <a href="group__common.html#gad8f6fde995ab21ab95267c22c7b12c90">更多...</a><br /></td></tr>
<tr class="separator:gad8f6fde995ab21ab95267c22c7b12c90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadfb4158efe784f3d3a765f0747b13a80"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gadfb4158efe784f3d3a765f0747b13a80"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gadfb4158efe784f3d3a765f0747b13a80">pcl::computeCovarianceMatrixNormalized</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gadfb4158efe784f3d3a765f0747b13a80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function.  <a href="group__common.html#gadfb4158efe784f3d3a765f0747b13a80">更多...</a><br /></td></tr>
<tr class="separator:gadfb4158efe784f3d3a765f0747b13a80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga72dfb6e965df9752c88790e026a8ab5f"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga72dfb6e965df9752c88790e026a8ab5f"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">pcl::computeMeanAndCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:ga72dfb6e965df9752c88790e026a8ab5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">更多...</a><br /></td></tr>
<tr class="separator:ga72dfb6e965df9752c88790e026a8ab5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad2138293b6dd302ceaa128fae950f27d"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gad2138293b6dd302ceaa128fae950f27d"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gad2138293b6dd302ceaa128fae950f27d">pcl::computeMeanAndCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:gad2138293b6dd302ceaa128fae950f27d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#gad2138293b6dd302ceaa128fae950f27d">更多...</a><br /></td></tr>
<tr class="separator:gad2138293b6dd302ceaa128fae950f27d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4d7bf1a81f21fb97505c91957b7f033"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gac4d7bf1a81f21fb97505c91957b7f033"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac4d7bf1a81f21fb97505c91957b7f033">pcl::computeMeanAndCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:gac4d7bf1a81f21fb97505c91957b7f033"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#gac4d7bf1a81f21fb97505c91957b7f033">更多...</a><br /></td></tr>
<tr class="separator:gac4d7bf1a81f21fb97505c91957b7f033"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5956698bec9ece7a491ad2fbbfbe6bc1"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga5956698bec9ece7a491ad2fbbfbe6bc1"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga5956698bec9ece7a491ad2fbbfbe6bc1">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:ga5956698bec9ece7a491ad2fbbfbe6bc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#ga5956698bec9ece7a491ad2fbbfbe6bc1">更多...</a><br /></td></tr>
<tr class="separator:ga5956698bec9ece7a491ad2fbbfbe6bc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac33176152049aa1f63867afae8225000"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gac33176152049aa1f63867afae8225000"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac33176152049aa1f63867afae8225000">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gac33176152049aa1f63867afae8225000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#gac33176152049aa1f63867afae8225000">更多...</a><br /></td></tr>
<tr class="separator:gac33176152049aa1f63867afae8225000"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf3ff94b2145fb22871e41e87ee495b2"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gacf3ff94b2145fb22871e41e87ee495b2"><td class="memTemplItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gacf3ff94b2145fb22871e41e87ee495b2">pcl::computeCovarianceMatrix</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</td></tr>
<tr class="memdesc:gacf3ff94b2145fb22871e41e87ee495b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function.  <a href="group__common.html#gacf3ff94b2145fb22871e41e87ee495b2">更多...</a><br /></td></tr>
<tr class="separator:gacf3ff94b2145fb22871e41e87ee495b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7f82fbd4e17063ab86287a2543bdea88"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga7f82fbd4e17063ab86287a2543bdea88"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">pcl::demeanPointCloud</a> (<a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_iterator, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, int npts=0)</td></tr>
<tr class="memdesc:ga7f82fbd4e17063ab86287a2543bdea88"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation  <a href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">更多...</a><br /></td></tr>
<tr class="separator:ga7f82fbd4e17063ab86287a2543bdea88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7953d5001218e840a3a10a2c8649461e"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga7953d5001218e840a3a10a2c8649461e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga7953d5001218e840a3a10a2c8649461e">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga7953d5001218e840a3a10a2c8649461e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation  <a href="group__common.html#ga7953d5001218e840a3a10a2c8649461e">更多...</a><br /></td></tr>
<tr class="separator:ga7953d5001218e840a3a10a2c8649461e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab6c182905d630aa151bac567011b93d5"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gab6c182905d630aa151bac567011b93d5"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab6c182905d630aa151bac567011b93d5">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gab6c182905d630aa151bac567011b93d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation  <a href="group__common.html#gab6c182905d630aa151bac567011b93d5">更多...</a><br /></td></tr>
<tr class="separator:gab6c182905d630aa151bac567011b93d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga516ff833c2593ba6e53d369b25989f81"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga516ff833c2593ba6e53d369b25989f81"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga516ff833c2593ba6e53d369b25989f81">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga516ff833c2593ba6e53d369b25989f81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation  <a href="group__common.html#ga516ff833c2593ba6e53d369b25989f81">更多...</a><br /></td></tr>
<tr class="separator:ga516ff833c2593ba6e53d369b25989f81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga553c2ce698f074fe38d74f01b57a3343"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga553c2ce698f074fe38d74f01b57a3343"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga553c2ce698f074fe38d74f01b57a3343">pcl::demeanPointCloud</a> (<a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_iterator, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;cloud_out, int npts=0)</td></tr>
<tr class="memdesc:ga553c2ce698f074fe38d74f01b57a3343"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix  <a href="group__common.html#ga553c2ce698f074fe38d74f01b57a3343">更多...</a><br /></td></tr>
<tr class="separator:ga553c2ce698f074fe38d74f01b57a3343"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae19c71709093628e61037337056b99fa"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gae19c71709093628e61037337056b99fa"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gae19c71709093628e61037337056b99fa">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gae19c71709093628e61037337056b99fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix  <a href="group__common.html#gae19c71709093628e61037337056b99fa">更多...</a><br /></td></tr>
<tr class="separator:gae19c71709093628e61037337056b99fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga79129774e295b6a11559bed8dc5f0b48"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga79129774e295b6a11559bed8dc5f0b48"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga79129774e295b6a11559bed8dc5f0b48">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga79129774e295b6a11559bed8dc5f0b48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix  <a href="group__common.html#ga79129774e295b6a11559bed8dc5f0b48">更多...</a><br /></td></tr>
<tr class="separator:ga79129774e295b6a11559bed8dc5f0b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga539a53e4b17ad9ed2f00ae8b2e464221"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga539a53e4b17ad9ed2f00ae8b2e464221"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga539a53e4b17ad9ed2f00ae8b2e464221">pcl::demeanPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga539a53e4b17ad9ed2f00ae8b2e464221"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix  <a href="group__common.html#ga539a53e4b17ad9ed2f00ae8b2e464221">更多...</a><br /></td></tr>
<tr class="separator:ga539a53e4b17ad9ed2f00ae8b2e464221"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4d047d6f7b50a2d81306cc59ac927179"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga4d047d6f7b50a2d81306cc59ac927179"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4d047d6f7b50a2d81306cc59ac927179">pcl::computeNDCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:ga4d047d6f7b50a2d81306cc59ac927179"><td class="mdescLeft">&#160;</td><td class="mdescRight">General, all purpose nD centroid estimation for a set of points using their indices.  <a href="group__common.html#ga4d047d6f7b50a2d81306cc59ac927179">更多...</a><br /></td></tr>
<tr class="separator:ga4d047d6f7b50a2d81306cc59ac927179"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf936744f1fa429ebc22c2544e0d0a747"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaf936744f1fa429ebc22c2544e0d0a747"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaf936744f1fa429ebc22c2544e0d0a747">pcl::computeNDCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:gaf936744f1fa429ebc22c2544e0d0a747"><td class="mdescLeft">&#160;</td><td class="mdescRight">General, all purpose nD centroid estimation for a set of points using their indices.  <a href="group__common.html#gaf936744f1fa429ebc22c2544e0d0a747">更多...</a><br /></td></tr>
<tr class="separator:gaf936744f1fa429ebc22c2544e0d0a747"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9654681b5a78f1e3ad5566de05e1d638"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga9654681b5a78f1e3ad5566de05e1d638"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga9654681b5a78f1e3ad5566de05e1d638">pcl::computeNDCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;centroid)</td></tr>
<tr class="memdesc:ga9654681b5a78f1e3ad5566de05e1d638"><td class="mdescLeft">&#160;</td><td class="mdescRight">General, all purpose nD centroid estimation for a set of points using their indices.  <a href="group__common.html#ga9654681b5a78f1e3ad5566de05e1d638">更多...</a><br /></td></tr>
<tr class="separator:ga9654681b5a78f1e3ad5566de05e1d638"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga65222f7a25f5de1aff9b07d2aea361b1"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:ga65222f7a25f5de1aff9b07d2aea361b1"><td class="memTemplItemLeft" align="right" valign="top">size_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga65222f7a25f5de1aff9b07d2aea361b1">pcl::computeCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud, PointOutT &amp;centroid)</td></tr>
<tr class="separator:ga65222f7a25f5de1aff9b07d2aea361b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga02e71a096abe1156be18c6322c0728c0"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:ga02e71a096abe1156be18c6322c0728c0"><td class="memTemplItemLeft" align="right" valign="top">size_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga02e71a096abe1156be18c6322c0728c0">pcl::computeCentroid</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, PointOutT &amp;centroid)</td></tr>
<tr class="separator:ga02e71a096abe1156be18c6322c0728c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga54999c02ba9bee56404539747b0fda51"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga54999c02ba9bee56404539747b0fda51">pcl::getAngle3D</a> (const Eigen::Vector4f &amp;v1, const Eigen::Vector4f &amp;v2, const bool in_degree=false)</td></tr>
<tr class="memdesc:ga54999c02ba9bee56404539747b0fda51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the smallest angle between two 3D vectors in radians (default) or degree.  <a href="group__common.html#ga54999c02ba9bee56404539747b0fda51">更多...</a><br /></td></tr>
<tr class="separator:ga54999c02ba9bee56404539747b0fda51"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8c74d7c459961a2650c22eff8126aef8"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga8c74d7c459961a2650c22eff8126aef8">pcl::getAngle3D</a> (const Eigen::Vector3f &amp;v1, const Eigen::Vector3f &amp;v2, const bool in_degree=false)</td></tr>
<tr class="memdesc:ga8c74d7c459961a2650c22eff8126aef8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the smallest angle between two 3D vectors in radians (default) or degree.  <a href="group__common.html#ga8c74d7c459961a2650c22eff8126aef8">更多...</a><br /></td></tr>
<tr class="separator:ga8c74d7c459961a2650c22eff8126aef8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3349ce9c26d4acbb1adae1e9b2d5f7e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga3349ce9c26d4acbb1adae1e9b2d5f7e5">pcl::getMeanStd</a> (const std::vector&lt; float &gt; &amp;values, double &amp;mean, double &amp;stddev)</td></tr>
<tr class="memdesc:ga3349ce9c26d4acbb1adae1e9b2d5f7e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute both the mean and the standard deviation of an array of values  <a href="group__common.html#ga3349ce9c26d4acbb1adae1e9b2d5f7e5">更多...</a><br /></td></tr>
<tr class="separator:ga3349ce9c26d4acbb1adae1e9b2d5f7e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab831a44b375fa7e6bada740d1d17e247"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gab831a44b375fa7e6bada740d1d17e247"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab831a44b375fa7e6bada740d1d17e247">pcl::getPointsInBox</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Vector4f &amp;min_pt, Eigen::Vector4f &amp;max_pt, std::vector&lt; int &gt; &amp;indices)</td></tr>
<tr class="memdesc:gab831a44b375fa7e6bada740d1d17e247"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a set of points residing in a box given its bounds  <a href="group__common.html#gab831a44b375fa7e6bada740d1d17e247">更多...</a><br /></td></tr>
<tr class="separator:gab831a44b375fa7e6bada740d1d17e247"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1583a71aef0f54550adef0ebfef89edd"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga1583a71aef0f54550adef0ebfef89edd"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga1583a71aef0f54550adef0ebfef89edd">pcl::getMaxDistance</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const Eigen::Vector4f &amp;pivot_pt, Eigen::Vector4f &amp;max_pt)</td></tr>
<tr class="memdesc:ga1583a71aef0f54550adef0ebfef89edd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the point at maximum distance from a given point and a given pointcloud  <a href="group__common.html#ga1583a71aef0f54550adef0ebfef89edd">更多...</a><br /></td></tr>
<tr class="separator:ga1583a71aef0f54550adef0ebfef89edd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab5669ac9649b383c053ef67cc06e6b55"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gab5669ac9649b383c053ef67cc06e6b55"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab5669ac9649b383c053ef67cc06e6b55">pcl::getMaxDistance</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, const Eigen::Vector4f &amp;pivot_pt, Eigen::Vector4f &amp;max_pt)</td></tr>
<tr class="memdesc:gab5669ac9649b383c053ef67cc06e6b55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the point at maximum distance from a given point and a given pointcloud  <a href="group__common.html#gab5669ac9649b383c053ef67cc06e6b55">更多...</a><br /></td></tr>
<tr class="separator:gab5669ac9649b383c053ef67cc06e6b55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3166f09aafd659f69dc75e63f5e10f81"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga3166f09aafd659f69dc75e63f5e10f81"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga3166f09aafd659f69dc75e63f5e10f81">pcl::getMinMax3D</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;min_pt, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;max_pt)</td></tr>
<tr class="memdesc:ga3166f09aafd659f69dc75e63f5e10f81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud  <a href="group__common.html#ga3166f09aafd659f69dc75e63f5e10f81">更多...</a><br /></td></tr>
<tr class="separator:ga3166f09aafd659f69dc75e63f5e10f81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafd9010977f5e52b35b484be7624df3f8"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gafd9010977f5e52b35b484be7624df3f8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gafd9010977f5e52b35b484be7624df3f8">pcl::getMinMax3D</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, Eigen::Vector4f &amp;min_pt, Eigen::Vector4f &amp;max_pt)</td></tr>
<tr class="memdesc:gafd9010977f5e52b35b484be7624df3f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud  <a href="group__common.html#gafd9010977f5e52b35b484be7624df3f8">更多...</a><br /></td></tr>
<tr class="separator:gafd9010977f5e52b35b484be7624df3f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga47dac23a8a283dd07f62fa7aa21b63ec"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga47dac23a8a283dd07f62fa7aa21b63ec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga47dac23a8a283dd07f62fa7aa21b63ec">pcl::getMinMax3D</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, Eigen::Vector4f &amp;min_pt, Eigen::Vector4f &amp;max_pt)</td></tr>
<tr class="memdesc:ga47dac23a8a283dd07f62fa7aa21b63ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud  <a href="group__common.html#ga47dac23a8a283dd07f62fa7aa21b63ec">更多...</a><br /></td></tr>
<tr class="separator:ga47dac23a8a283dd07f62fa7aa21b63ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga41eb246206d51f77a8cb82b5d963e6a2"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga41eb246206d51f77a8cb82b5d963e6a2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga41eb246206d51f77a8cb82b5d963e6a2">pcl::getMinMax3D</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, Eigen::Vector4f &amp;min_pt, Eigen::Vector4f &amp;max_pt)</td></tr>
<tr class="memdesc:ga41eb246206d51f77a8cb82b5d963e6a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud  <a href="group__common.html#ga41eb246206d51f77a8cb82b5d963e6a2">更多...</a><br /></td></tr>
<tr class="separator:ga41eb246206d51f77a8cb82b5d963e6a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab64d6ba9e834d29feda71a76d3ec841f"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gab64d6ba9e834d29feda71a76d3ec841f"><td class="memTemplItemLeft" align="right" valign="top">double&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab64d6ba9e834d29feda71a76d3ec841f">pcl::getCircumcircleRadius</a> (const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pa, const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pb, const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pc)</td></tr>
<tr class="memdesc:gab64d6ba9e834d29feda71a76d3ec841f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the radius of a circumscribed circle for a triangle formed of three points pa, pb, and pc  <a href="group__common.html#gab64d6ba9e834d29feda71a76d3ec841f">更多...</a><br /></td></tr>
<tr class="separator:gab64d6ba9e834d29feda71a76d3ec841f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaacff2e632283be60810678d329b166ec"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gaacff2e632283be60810678d329b166ec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaacff2e632283be60810678d329b166ec">pcl::getMinMax</a> (const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;histogram, int len, float &amp;min_p, float &amp;max_p)</td></tr>
<tr class="memdesc:gaacff2e632283be60810678d329b166ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on a point histogram  <a href="group__common.html#gaacff2e632283be60810678d329b166ec">更多...</a><br /></td></tr>
<tr class="separator:gaacff2e632283be60810678d329b166ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1a9e18520c49be76f2a28834e2da8a56"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga1a9e18520c49be76f2a28834e2da8a56"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga1a9e18520c49be76f2a28834e2da8a56">pcl::calculatePolygonArea</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;polygon)</td></tr>
<tr class="memdesc:ga1a9e18520c49be76f2a28834e2da8a56"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the area of a polygon given a point cloud that defines the polygon  <a href="group__common.html#ga1a9e18520c49be76f2a28834e2da8a56">更多...</a><br /></td></tr>
<tr class="separator:ga1a9e18520c49be76f2a28834e2da8a56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga287e6ce2d4be348c059baf31eaf2dd54"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga287e6ce2d4be348c059baf31eaf2dd54">pcl::getMinMax</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud, int idx, const std::string &amp;field_name, float &amp;min_p, float &amp;max_p)</td></tr>
<tr class="memdesc:ga287e6ce2d4be348c059baf31eaf2dd54"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum and maximum values on a point histogram  <a href="group__common.html#ga287e6ce2d4be348c059baf31eaf2dd54">更多...</a><br /></td></tr>
<tr class="separator:ga287e6ce2d4be348c059baf31eaf2dd54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacb684087702126b29c8b99f1e2c2786b"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gacb684087702126b29c8b99f1e2c2786b">pcl::getMeanStdDev</a> (const std::vector&lt; float &gt; &amp;values, double &amp;mean, double &amp;stddev)</td></tr>
<tr class="memdesc:gacb684087702126b29c8b99f1e2c2786b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute both the mean and the standard deviation of an array of values  <a href="group__common.html#gacb684087702126b29c8b99f1e2c2786b">更多...</a><br /></td></tr>
<tr class="separator:gacb684087702126b29c8b99f1e2c2786b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab978bf1754771246b2f140a5b52a8f8b"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:gab978bf1754771246b2f140a5b52a8f8b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">pcl::copyPoint</a> (const PointInT &amp;point_in, PointOutT &amp;point_out)</td></tr>
<tr class="memdesc:gab978bf1754771246b2f140a5b52a8f8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the fields of a source point into a target point.  <a href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">更多...</a><br /></td></tr>
<tr class="separator:gab978bf1754771246b2f140a5b52a8f8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4ee346a92c01c042ffae2907ae5c93c5"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga4ee346a92c01c042ffae2907ae5c93c5">pcl::lineToLineSegment</a> (const Eigen::VectorXf &amp;line_a, const Eigen::VectorXf &amp;line_b, Eigen::Vector4f &amp;pt1_seg, Eigen::Vector4f &amp;pt2_seg)</td></tr>
<tr class="memdesc:ga4ee346a92c01c042ffae2907ae5c93c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the shortest 3D segment between two 3D lines  <a href="group__common.html#ga4ee346a92c01c042ffae2907ae5c93c5">更多...</a><br /></td></tr>
<tr class="separator:ga4ee346a92c01c042ffae2907ae5c93c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad9217ecd4cc14221f178af07a16ef75d"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gad9217ecd4cc14221f178af07a16ef75d">pcl::sqrPointToLineDistance</a> (const Eigen::Vector4f &amp;pt, const Eigen::Vector4f &amp;line_pt, const Eigen::Vector4f &amp;line_dir)</td></tr>
<tr class="memdesc:gad9217ecd4cc14221f178af07a16ef75d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the square distance from a point to a line (represented by a point and a direction)  <a href="group__common.html#gad9217ecd4cc14221f178af07a16ef75d">更多...</a><br /></td></tr>
<tr class="separator:gad9217ecd4cc14221f178af07a16ef75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3d6aa7accd68832e8a4d4707c358e40f"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga3d6aa7accd68832e8a4d4707c358e40f">pcl::sqrPointToLineDistance</a> (const Eigen::Vector4f &amp;pt, const Eigen::Vector4f &amp;line_pt, const Eigen::Vector4f &amp;line_dir, const double sqr_length)</td></tr>
<tr class="memdesc:ga3d6aa7accd68832e8a4d4707c358e40f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the square distance from a point to a line (represented by a point and a direction)  <a href="group__common.html#ga3d6aa7accd68832e8a4d4707c358e40f">更多...</a><br /></td></tr>
<tr class="separator:ga3d6aa7accd68832e8a4d4707c358e40f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga30ceb9b4896578ed075a36ad3937ee26"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga30ceb9b4896578ed075a36ad3937ee26"><td class="memTemplItemLeft" align="right" valign="top">double&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga30ceb9b4896578ed075a36ad3937ee26">pcl::getMaxSegment</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pmin, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pmax)</td></tr>
<tr class="memdesc:ga30ceb9b4896578ed075a36ad3937ee26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the maximum segment in a given set of points, and return the minimum and maximum points.  <a href="group__common.html#ga30ceb9b4896578ed075a36ad3937ee26">更多...</a><br /></td></tr>
<tr class="separator:ga30ceb9b4896578ed075a36ad3937ee26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1794862c1f52bfb188d6a4b48a2a5f4b"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga1794862c1f52bfb188d6a4b48a2a5f4b"><td class="memTemplItemLeft" align="right" valign="top">double&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga1794862c1f52bfb188d6a4b48a2a5f4b">pcl::getMaxSegment</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pmin, <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;pmax)</td></tr>
<tr class="memdesc:ga1794862c1f52bfb188d6a4b48a2a5f4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the maximum segment in a given set of points, and return the minimum and maximum points.  <a href="group__common.html#ga1794862c1f52bfb188d6a4b48a2a5f4b">更多...</a><br /></td></tr>
<tr class="separator:ga1794862c1f52bfb188d6a4b48a2a5f4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga72970b7435480c0c1827c8e74bc1d605"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:ga72970b7435480c0c1827c8e74bc1d605"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga72970b7435480c0c1827c8e74bc1d605">pcl::eigen22</a> (const Matrix &amp;mat, typename Matrix::Scalar &amp;eigenvalue, Vector &amp;eigenvector)</td></tr>
<tr class="memdesc:ga72970b7435480c0c1827c8e74bc1d605"><td class="mdescLeft">&#160;</td><td class="mdescRight">determine the smallest eigenvalue and its corresponding eigenvector  <a href="group__common.html#ga72970b7435480c0c1827c8e74bc1d605">更多...</a><br /></td></tr>
<tr class="separator:ga72970b7435480c0c1827c8e74bc1d605"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4fdd69805d49c416393c604f9f209113"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:ga4fdd69805d49c416393c604f9f209113"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4fdd69805d49c416393c604f9f209113">pcl::eigen22</a> (const Matrix &amp;mat, Matrix &amp;eigenvectors, Vector &amp;eigenvalues)</td></tr>
<tr class="memdesc:ga4fdd69805d49c416393c604f9f209113"><td class="mdescLeft">&#160;</td><td class="mdescRight">determine the smallest eigenvalue and its corresponding eigenvector  <a href="group__common.html#ga4fdd69805d49c416393c604f9f209113">更多...</a><br /></td></tr>
<tr class="separator:ga4fdd69805d49c416393c604f9f209113"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga11c9b186d04d2e8a868e058473214622"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:ga11c9b186d04d2e8a868e058473214622"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga11c9b186d04d2e8a868e058473214622">pcl::computeCorrespondingEigenVector</a> (const Matrix &amp;mat, const typename Matrix::Scalar &amp;eigenvalue, Vector &amp;eigenvector)</td></tr>
<tr class="memdesc:ga11c9b186d04d2e8a868e058473214622"><td class="mdescLeft">&#160;</td><td class="mdescRight">determines the corresponding eigenvector to the given eigenvalue of the symmetric positive semi definite input matrix  <a href="group__common.html#ga11c9b186d04d2e8a868e058473214622">更多...</a><br /></td></tr>
<tr class="separator:ga11c9b186d04d2e8a868e058473214622"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaca873868052e7d26efcf4b684a17bef2"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:gaca873868052e7d26efcf4b684a17bef2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a> (const Matrix &amp;mat, typename Matrix::Scalar &amp;eigenvalue, Vector &amp;eigenvector)</td></tr>
<tr class="memdesc:gaca873868052e7d26efcf4b684a17bef2"><td class="mdescLeft">&#160;</td><td class="mdescRight">determines the eigenvector and eigenvalue of the smallest eigenvalue of the symmetric positive semi definite input matrix  <a href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">更多...</a><br /></td></tr>
<tr class="separator:gaca873868052e7d26efcf4b684a17bef2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3a1ba2729012164635113224cb211581"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:ga3a1ba2729012164635113224cb211581"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga3a1ba2729012164635113224cb211581">pcl::eigen33</a> (const Matrix &amp;mat, Vector &amp;evals)</td></tr>
<tr class="memdesc:ga3a1ba2729012164635113224cb211581"><td class="mdescLeft">&#160;</td><td class="mdescRight">determines the eigenvalues of the symmetric positive semi definite input matrix  <a href="group__common.html#ga3a1ba2729012164635113224cb211581">更多...</a><br /></td></tr>
<tr class="separator:ga3a1ba2729012164635113224cb211581"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76d78c3e9c0f3f58a0806499ae6ed97b"><td class="memTemplParams" colspan="2">template&lt;typename Matrix , typename Vector &gt; </td></tr>
<tr class="memitem:ga76d78c3e9c0f3f58a0806499ae6ed97b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga76d78c3e9c0f3f58a0806499ae6ed97b">pcl::eigen33</a> (const Matrix &amp;mat, Matrix &amp;evecs, Vector &amp;evals)</td></tr>
<tr class="memdesc:ga76d78c3e9c0f3f58a0806499ae6ed97b"><td class="mdescLeft">&#160;</td><td class="mdescRight">determines the eigenvalues and corresponding eigenvectors of the symmetric positive semi definite input matrix  <a href="group__common.html#ga76d78c3e9c0f3f58a0806499ae6ed97b">更多...</a><br /></td></tr>
<tr class="separator:ga76d78c3e9c0f3f58a0806499ae6ed97b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad09b0c9a50601f3ae20a7babfd9a8d2d"><td class="memTemplParams" colspan="2">template&lt;typename Matrix &gt; </td></tr>
<tr class="memitem:gad09b0c9a50601f3ae20a7babfd9a8d2d"><td class="memTemplItemLeft" align="right" valign="top">Matrix::Scalar&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gad09b0c9a50601f3ae20a7babfd9a8d2d">pcl::invert2x2</a> (const Matrix &amp;matrix, Matrix &amp;inverse)</td></tr>
<tr class="memdesc:gad09b0c9a50601f3ae20a7babfd9a8d2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the inverse of a 2x2 matrix  <a href="group__common.html#gad09b0c9a50601f3ae20a7babfd9a8d2d">更多...</a><br /></td></tr>
<tr class="separator:gad09b0c9a50601f3ae20a7babfd9a8d2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga503f55a565c260660c6ac0461f17fa8f"><td class="memTemplParams" colspan="2">template&lt;typename Matrix &gt; </td></tr>
<tr class="memitem:ga503f55a565c260660c6ac0461f17fa8f"><td class="memTemplItemLeft" align="right" valign="top">Matrix::Scalar&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga503f55a565c260660c6ac0461f17fa8f">pcl::invert3x3SymMatrix</a> (const Matrix &amp;matrix, Matrix &amp;inverse)</td></tr>
<tr class="memdesc:ga503f55a565c260660c6ac0461f17fa8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the inverse of a 3x3 symmetric matrix.  <a href="group__common.html#ga503f55a565c260660c6ac0461f17fa8f">更多...</a><br /></td></tr>
<tr class="separator:ga503f55a565c260660c6ac0461f17fa8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabb12d1f85437aafb0a3ac12af5633400"><td class="memTemplParams" colspan="2">template&lt;typename Matrix &gt; </td></tr>
<tr class="memitem:gabb12d1f85437aafb0a3ac12af5633400"><td class="memTemplItemLeft" align="right" valign="top">Matrix::Scalar&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gabb12d1f85437aafb0a3ac12af5633400">pcl::invert3x3Matrix</a> (const Matrix &amp;matrix, Matrix &amp;inverse)</td></tr>
<tr class="memdesc:gabb12d1f85437aafb0a3ac12af5633400"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the inverse of a general 3x3 matrix.  <a href="group__common.html#gabb12d1f85437aafb0a3ac12af5633400">更多...</a><br /></td></tr>
<tr class="separator:gabb12d1f85437aafb0a3ac12af5633400"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga44d0048ba1efd11359011eb47f6c92fa"><td class="memTemplParams" colspan="2">template&lt;typename Matrix &gt; </td></tr>
<tr class="memitem:ga44d0048ba1efd11359011eb47f6c92fa"><td class="memTemplItemLeft" align="right" valign="top">Matrix::Scalar&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga44d0048ba1efd11359011eb47f6c92fa">pcl::determinant3x3Matrix</a> (const Matrix &amp;matrix)</td></tr>
<tr class="memdesc:ga44d0048ba1efd11359011eb47f6c92fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the determinant of a 3x3 matrix.  <a href="group__common.html#ga44d0048ba1efd11359011eb47f6c92fa">更多...</a><br /></td></tr>
<tr class="separator:ga44d0048ba1efd11359011eb47f6c92fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf457d33994792e63129de9709dcdf329"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gaf457d33994792e63129de9709dcdf329">pcl::getTransFromUnitVectorsZY</a> (const Eigen::Vector3f &amp;z_axis, const Eigen::Vector3f &amp;y_direction, Eigen::Affine3f &amp;transformation)</td></tr>
<tr class="memdesc:gaf457d33994792e63129de9709dcdf329"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#gaf457d33994792e63129de9709dcdf329">更多...</a><br /></td></tr>
<tr class="separator:gaf457d33994792e63129de9709dcdf329"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga58d47eda3c3f5f91125296fd7d202ebb"><td class="memItemLeft" align="right" valign="top">Eigen::Affine3f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga58d47eda3c3f5f91125296fd7d202ebb">pcl::getTransFromUnitVectorsZY</a> (const Eigen::Vector3f &amp;z_axis, const Eigen::Vector3f &amp;y_direction)</td></tr>
<tr class="memdesc:ga58d47eda3c3f5f91125296fd7d202ebb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#ga58d47eda3c3f5f91125296fd7d202ebb">更多...</a><br /></td></tr>
<tr class="separator:ga58d47eda3c3f5f91125296fd7d202ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8319aa7921bdc742a9d0f95458e9cfe0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga8319aa7921bdc742a9d0f95458e9cfe0">pcl::getTransFromUnitVectorsXY</a> (const Eigen::Vector3f &amp;x_axis, const Eigen::Vector3f &amp;y_direction, Eigen::Affine3f &amp;transformation)</td></tr>
<tr class="memdesc:ga8319aa7921bdc742a9d0f95458e9cfe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>x_axis</em> into (1,0,0) and <em>y_direction</em> into a vector with z=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#ga8319aa7921bdc742a9d0f95458e9cfe0">更多...</a><br /></td></tr>
<tr class="separator:ga8319aa7921bdc742a9d0f95458e9cfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8933c653f39db3636bfbdd262278edcb"><td class="memItemLeft" align="right" valign="top">Eigen::Affine3f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga8933c653f39db3636bfbdd262278edcb">pcl::getTransFromUnitVectorsXY</a> (const Eigen::Vector3f &amp;x_axis, const Eigen::Vector3f &amp;y_direction)</td></tr>
<tr class="memdesc:ga8933c653f39db3636bfbdd262278edcb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>x_axis</em> into (1,0,0) and <em>y_direction</em> into a vector with z=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#ga8933c653f39db3636bfbdd262278edcb">更多...</a><br /></td></tr>
<tr class="separator:ga8933c653f39db3636bfbdd262278edcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7d1f523f342ff69277f23ea9f02fc5a6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga7d1f523f342ff69277f23ea9f02fc5a6">pcl::getTransformationFromTwoUnitVectors</a> (const Eigen::Vector3f &amp;y_direction, const Eigen::Vector3f &amp;z_axis, Eigen::Affine3f &amp;transformation)</td></tr>
<tr class="memdesc:ga7d1f523f342ff69277f23ea9f02fc5a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#ga7d1f523f342ff69277f23ea9f02fc5a6">更多...</a><br /></td></tr>
<tr class="separator:ga7d1f523f342ff69277f23ea9f02fc5a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gada89edf1699e05ecf7355738e9f56f6b"><td class="memItemLeft" align="right" valign="top">Eigen::Affine3f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gada89edf1699e05ecf7355738e9f56f6b">pcl::getTransformationFromTwoUnitVectors</a> (const Eigen::Vector3f &amp;y_direction, const Eigen::Vector3f &amp;z_axis)</td></tr>
<tr class="memdesc:gada89edf1699e05ecf7355738e9f56f6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#gada89edf1699e05ecf7355738e9f56f6b">更多...</a><br /></td></tr>
<tr class="separator:gada89edf1699e05ecf7355738e9f56f6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4375e99ec2ae368eec9379f506568611"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga4375e99ec2ae368eec9379f506568611">pcl::getTransformationFromTwoUnitVectorsAndOrigin</a> (const Eigen::Vector3f &amp;y_direction, const Eigen::Vector3f &amp;z_axis, const Eigen::Vector3f &amp;origin, Eigen::Affine3f &amp;transformation)</td></tr>
<tr class="memdesc:ga4375e99ec2ae368eec9379f506568611"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the transformation that will translate <em>orign</em> to (0,0,0) and rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>)  <a href="group__common.html#ga4375e99ec2ae368eec9379f506568611">更多...</a><br /></td></tr>
<tr class="separator:ga4375e99ec2ae368eec9379f506568611"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga637da495fec59c1c1d186aa6e3bac15b"><td class="memTemplParams" colspan="2">template&lt;typename Scalar &gt; </td></tr>
<tr class="memitem:ga637da495fec59c1c1d186aa6e3bac15b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga637da495fec59c1c1d186aa6e3bac15b">pcl::getEulerAngles</a> (const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;t, Scalar &amp;roll, Scalar &amp;pitch, Scalar &amp;yaw)</td></tr>
<tr class="memdesc:ga637da495fec59c1c1d186aa6e3bac15b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the Euler angles (XYZ-convention) from the given transformation  <a href="group__common.html#ga637da495fec59c1c1d186aa6e3bac15b">更多...</a><br /></td></tr>
<tr class="separator:ga637da495fec59c1c1d186aa6e3bac15b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3e52d439a979e71096f4dd50f1298f32"><td class="memTemplParams" colspan="2">template&lt;typename Scalar &gt; </td></tr>
<tr class="memitem:ga3e52d439a979e71096f4dd50f1298f32"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga3e52d439a979e71096f4dd50f1298f32">pcl::getTranslationAndEulerAngles</a> (const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;t, Scalar &amp;x, Scalar &amp;y, Scalar &amp;z, Scalar &amp;roll, Scalar &amp;pitch, Scalar &amp;yaw)</td></tr>
<tr class="separator:ga3e52d439a979e71096f4dd50f1298f32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5cc746d1fd72f99fee462ed1a9e4abea"><td class="memTemplParams" colspan="2">template&lt;typename Scalar &gt; </td></tr>
<tr class="memitem:ga5cc746d1fd72f99fee462ed1a9e4abea"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga5cc746d1fd72f99fee462ed1a9e4abea">pcl::getTransformation</a> (Scalar x, Scalar y, Scalar z, Scalar roll, Scalar pitch, Scalar yaw, Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;t)</td></tr>
<tr class="memdesc:ga5cc746d1fd72f99fee462ed1a9e4abea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a transformation from the given translation and Euler angles (XYZ-convention)  <a href="group__common.html#ga5cc746d1fd72f99fee462ed1a9e4abea">更多...</a><br /></td></tr>
<tr class="separator:ga5cc746d1fd72f99fee462ed1a9e4abea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf49a34180e337479ddeda21222882124"><td class="memItemLeft" align="right" valign="top">Eigen::Affine3f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gaf49a34180e337479ddeda21222882124">pcl::getTransformation</a> (float x, float y, float z, float roll, float pitch, float yaw)</td></tr>
<tr class="memdesc:gaf49a34180e337479ddeda21222882124"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a transformation from the given translation and Euler angles (XYZ-convention)  <a href="group__common.html#gaf49a34180e337479ddeda21222882124">更多...</a><br /></td></tr>
<tr class="separator:gaf49a34180e337479ddeda21222882124"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc18ebcacd806fd0c9336fe2f8b7208c"><td class="memTemplParams" colspan="2">template&lt;typename Derived &gt; </td></tr>
<tr class="memitem:gacc18ebcacd806fd0c9336fe2f8b7208c"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gacc18ebcacd806fd0c9336fe2f8b7208c">pcl::saveBinary</a> (const Eigen::MatrixBase&lt; Derived &gt; &amp;matrix, std::ostream &amp;file)</td></tr>
<tr class="memdesc:gacc18ebcacd806fd0c9336fe2f8b7208c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a matrix to an output stream  <a href="group__common.html#gacc18ebcacd806fd0c9336fe2f8b7208c">更多...</a><br /></td></tr>
<tr class="separator:gacc18ebcacd806fd0c9336fe2f8b7208c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5281205532955d384c8aa22ff4ff5e80"><td class="memTemplParams" colspan="2">template&lt;typename Derived &gt; </td></tr>
<tr class="memitem:ga5281205532955d384c8aa22ff4ff5e80"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga5281205532955d384c8aa22ff4ff5e80">pcl::loadBinary</a> (Eigen::MatrixBase&lt; Derived &gt; const &amp;matrix, std::istream &amp;file)</td></tr>
<tr class="memdesc:ga5281205532955d384c8aa22ff4ff5e80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a matrix from an input stream  <a href="group__common.html#ga5281205532955d384c8aa22ff4ff5e80">更多...</a><br /></td></tr>
<tr class="separator:ga5281205532955d384c8aa22ff4ff5e80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3">pcl::lineWithLineIntersection</a> (const Eigen::VectorXf &amp;line_a, const Eigen::VectorXf &amp;line_b, Eigen::Vector4f &amp;point, double sqr_eps=1e-4)</td></tr>
<tr class="memdesc:ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the intersection of a two 3D lines in space as a 3D point  <a href="group__common.html#ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3">更多...</a><br /></td></tr>
<tr class="separator:ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9b79c559e12f4aacb41825f8b43840c2"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga9b79c559e12f4aacb41825f8b43840c2">pcl::lineWithLineIntersection</a> (const <a class="el" href="structpcl_1_1_model_coefficients.html">pcl::ModelCoefficients</a> &amp;line_a, const <a class="el" href="structpcl_1_1_model_coefficients.html">pcl::ModelCoefficients</a> &amp;line_b, Eigen::Vector4f &amp;point, double sqr_eps=1e-4)</td></tr>
<tr class="memdesc:ga9b79c559e12f4aacb41825f8b43840c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the intersection of a two 3D lines in space as a 3D point  <a href="group__common.html#ga9b79c559e12f4aacb41825f8b43840c2">更多...</a><br /></td></tr>
<tr class="separator:ga9b79c559e12f4aacb41825f8b43840c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2bc4b9a4e25de1d0b00db4e41f0ad682"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga2bc4b9a4e25de1d0b00db4e41f0ad682">pcl::getFieldIndex</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud, const std::string &amp;field_name)</td></tr>
<tr class="memdesc:ga2bc4b9a4e25de1d0b00db4e41f0ad682"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the index of a specified field (i.e., dimension/channel)  <a href="group__common.html#ga2bc4b9a4e25de1d0b00db4e41f0ad682">更多...</a><br /></td></tr>
<tr class="separator:ga2bc4b9a4e25de1d0b00db4e41f0ad682"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad9e56869486f44e2caa30a584c1b734"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gaad9e56869486f44e2caa30a584c1b734"><td class="memTemplItemLeft" align="right" valign="top">int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaad9e56869486f44e2caa30a584c1b734">pcl::getFieldIndex</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, const std::string &amp;field_name, std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;fields)</td></tr>
<tr class="memdesc:gaad9e56869486f44e2caa30a584c1b734"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the index of a specified field (i.e., dimension/channel)  <a href="group__common.html#gaad9e56869486f44e2caa30a584c1b734">更多...</a><br /></td></tr>
<tr class="separator:gaad9e56869486f44e2caa30a584c1b734"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga21f637d9f7422a769448983af5fcbdeb"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga21f637d9f7422a769448983af5fcbdeb"><td class="memTemplItemLeft" align="right" valign="top">int&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga21f637d9f7422a769448983af5fcbdeb">pcl::getFieldIndex</a> (const std::string &amp;field_name, std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;fields)</td></tr>
<tr class="memdesc:ga21f637d9f7422a769448983af5fcbdeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the index of a specified field (i.e., dimension/channel)  <a href="group__common.html#ga21f637d9f7422a769448983af5fcbdeb">更多...</a><br /></td></tr>
<tr class="separator:ga21f637d9f7422a769448983af5fcbdeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa2ff830572b7cbf2fd8ce335fd9ca4fb"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gaa2ff830572b7cbf2fd8ce335fd9ca4fb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaa2ff830572b7cbf2fd8ce335fd9ca4fb">pcl::getFields</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud, std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;fields)</td></tr>
<tr class="memdesc:gaa2ff830572b7cbf2fd8ce335fd9ca4fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of available fields (i.e., dimension/channel)  <a href="group__common.html#gaa2ff830572b7cbf2fd8ce335fd9ca4fb">更多...</a><br /></td></tr>
<tr class="separator:gaa2ff830572b7cbf2fd8ce335fd9ca4fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae88a16c0d6d70da8978ead0bb4e8e766"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gae88a16c0d6d70da8978ead0bb4e8e766"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gae88a16c0d6d70da8978ead0bb4e8e766">pcl::getFields</a> (std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;fields)</td></tr>
<tr class="memdesc:gae88a16c0d6d70da8978ead0bb4e8e766"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of available fields (i.e., dimension/channel)  <a href="group__common.html#gae88a16c0d6d70da8978ead0bb4e8e766">更多...</a><br /></td></tr>
<tr class="separator:gae88a16c0d6d70da8978ead0bb4e8e766"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaabed3f370d11ba5dc154d79e682d35b4"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gaabed3f370d11ba5dc154d79e682d35b4"><td class="memTemplItemLeft" align="right" valign="top">std::string&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaabed3f370d11ba5dc154d79e682d35b4">pcl::getFieldsList</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud)</td></tr>
<tr class="memdesc:gaabed3f370d11ba5dc154d79e682d35b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of all fields available in a given cloud  <a href="group__common.html#gaabed3f370d11ba5dc154d79e682d35b4">更多...</a><br /></td></tr>
<tr class="separator:gaabed3f370d11ba5dc154d79e682d35b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga769f320a73865c3fe30cb96c0f932e76"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga769f320a73865c3fe30cb96c0f932e76">pcl::getFieldsList</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud)</td></tr>
<tr class="memdesc:ga769f320a73865c3fe30cb96c0f932e76"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the available point cloud fields as a space separated string  <a href="group__common.html#ga769f320a73865c3fe30cb96c0f932e76">更多...</a><br /></td></tr>
<tr class="separator:ga769f320a73865c3fe30cb96c0f932e76"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga83ff4ee40cd3c49c7500905f59f37536"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga83ff4ee40cd3c49c7500905f59f37536">pcl::getFieldSize</a> (const int datatype)</td></tr>
<tr class="memdesc:ga83ff4ee40cd3c49c7500905f59f37536"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtains the size of a specific field data type in bytes  <a href="group__common.html#ga83ff4ee40cd3c49c7500905f59f37536">更多...</a><br /></td></tr>
<tr class="separator:ga83ff4ee40cd3c49c7500905f59f37536"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac282d255323a916e942f85b7f16740e3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gac282d255323a916e942f85b7f16740e3">pcl::getFieldType</a> (const int size, char type)</td></tr>
<tr class="memdesc:gac282d255323a916e942f85b7f16740e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtains the type of the <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> from a specific size and type  <a href="group__common.html#gac282d255323a916e942f85b7f16740e3">更多...</a><br /></td></tr>
<tr class="separator:gac282d255323a916e942f85b7f16740e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4a4eaf1f19dd043252a0b93ac975a10"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gac4a4eaf1f19dd043252a0b93ac975a10">pcl::getFieldType</a> (const int type)</td></tr>
<tr class="memdesc:gac4a4eaf1f19dd043252a0b93ac975a10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtains the type of the <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> from a specific <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> as a char  <a href="group__common.html#gac4a4eaf1f19dd043252a0b93ac975a10">更多...</a><br /></td></tr>
<tr class="separator:gac4a4eaf1f19dd043252a0b93ac975a10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaebfbeb8e50f90057188131228b2e8b6"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gaaebfbeb8e50f90057188131228b2e8b6">pcl::concatenatePointCloud</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud1, const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud2, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_out)</td></tr>
<tr class="memdesc:gaaebfbeb8e50f90057188131228b2e8b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatenate two <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a>.  <a href="group__common.html#gaaebfbeb8e50f90057188131228b2e8b6">更多...</a><br /></td></tr>
<tr class="separator:gaaebfbeb8e50f90057188131228b2e8b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa65b1c8d782e7b776ae682679d2d948f"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_out)</td></tr>
<tr class="memdesc:gaa65b1c8d782e7b776ae682679d2d948f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">更多...</a><br /></td></tr>
<tr class="separator:gaa65b1c8d782e7b776ae682679d2d948f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6052086912991a41541e3f1e40555a05"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga6052086912991a41541e3f1e40555a05">pcl::copyPointCloud</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_in, const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;indices, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_out)</td></tr>
<tr class="memdesc:ga6052086912991a41541e3f1e40555a05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#ga6052086912991a41541e3f1e40555a05">更多...</a><br /></td></tr>
<tr class="separator:ga6052086912991a41541e3f1e40555a05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1c6c02fe197e0ea6ca249c46dda0e602"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga1c6c02fe197e0ea6ca249c46dda0e602">pcl::copyPointCloud</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_in, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_out)</td></tr>
<tr class="memdesc:ga1c6c02fe197e0ea6ca249c46dda0e602"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy fields and point cloud data from <em>cloud_in</em> to <em>cloud_out</em>  <a href="group__common.html#ga1c6c02fe197e0ea6ca249c46dda0e602">更多...</a><br /></td></tr>
<tr class="separator:ga1c6c02fe197e0ea6ca249c46dda0e602"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab99511f54b952b8a5608e4ed7f41a68d"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gab99511f54b952b8a5608e4ed7f41a68d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gab99511f54b952b8a5608e4ed7f41a68d">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gab99511f54b952b8a5608e4ed7f41a68d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#gab99511f54b952b8a5608e4ed7f41a68d">更多...</a><br /></td></tr>
<tr class="separator:gab99511f54b952b8a5608e4ed7f41a68d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6531a806d1c7ac0d5c23f79f673db191"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga6531a806d1c7ac0d5c23f79f673db191"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga6531a806d1c7ac0d5c23f79f673db191">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga6531a806d1c7ac0d5c23f79f673db191"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#ga6531a806d1c7ac0d5c23f79f673db191">更多...</a><br /></td></tr>
<tr class="separator:ga6531a806d1c7ac0d5c23f79f673db191"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga44ece0c2faffdb26cd75417200454577"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga44ece0c2faffdb26cd75417200454577"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga44ece0c2faffdb26cd75417200454577">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga44ece0c2faffdb26cd75417200454577"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#ga44ece0c2faffdb26cd75417200454577">更多...</a><br /></td></tr>
<tr class="separator:ga44ece0c2faffdb26cd75417200454577"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaafe5bf1194ffaad83a2fc04cde6b20e4"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:gaafe5bf1194ffaad83a2fc04cde6b20e4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaafe5bf1194ffaad83a2fc04cde6b20e4">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gaafe5bf1194ffaad83a2fc04cde6b20e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#gaafe5bf1194ffaad83a2fc04cde6b20e4">更多...</a><br /></td></tr>
<tr class="separator:gaafe5bf1194ffaad83a2fc04cde6b20e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaff182bca8d0295d727baaa1fd368c6ad"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:gaff182bca8d0295d727baaa1fd368c6ad"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaff182bca8d0295d727baaa1fd368c6ad">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gaff182bca8d0295d727baaa1fd368c6ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy all the fields from a given point cloud into a new point cloud  <a href="group__common.html#gaff182bca8d0295d727baaa1fd368c6ad">更多...</a><br /></td></tr>
<tr class="separator:gaff182bca8d0295d727baaa1fd368c6ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4e98fb8923a6d8c4dab35ff96c7b1dd6"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:ga4e98fb8923a6d8c4dab35ff96c7b1dd6"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4e98fb8923a6d8c4dab35ff96c7b1dd6">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga4e98fb8923a6d8c4dab35ff96c7b1dd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#ga4e98fb8923a6d8c4dab35ff96c7b1dd6">更多...</a><br /></td></tr>
<tr class="separator:ga4e98fb8923a6d8c4dab35ff96c7b1dd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafeb71f88a4e674ec4d156d013c8bb393"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:gafeb71f88a4e674ec4d156d013c8bb393"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gafeb71f88a4e674ec4d156d013c8bb393">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud_in, const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gafeb71f88a4e674ec4d156d013c8bb393"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#gafeb71f88a4e674ec4d156d013c8bb393">更多...</a><br /></td></tr>
<tr class="separator:gafeb71f88a4e674ec4d156d013c8bb393"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga67ab079e174e900e6e0b235fb88d7160"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:ga67ab079e174e900e6e0b235fb88d7160"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga67ab079e174e900e6e0b235fb88d7160">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:ga67ab079e174e900e6e0b235fb88d7160"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#ga67ab079e174e900e6e0b235fb88d7160">更多...</a><br /></td></tr>
<tr class="separator:ga67ab079e174e900e6e0b235fb88d7160"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa5ab28ac738a42a65f9f2033d6b33252"><td class="memTemplParams" colspan="2">template&lt;typename PointInT , typename PointOutT &gt; </td></tr>
<tr class="memitem:gaa5ab28ac738a42a65f9f2033d6b33252"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaa5ab28ac738a42a65f9f2033d6b33252">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;cloud_in, const std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gaa5ab28ac738a42a65f9f2033d6b33252"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract the indices of a given point cloud as a new point cloud  <a href="group__common.html#gaa5ab28ac738a42a65f9f2033d6b33252">更多...</a><br /></td></tr>
<tr class="separator:gaa5ab28ac738a42a65f9f2033d6b33252"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4d12b955edd61947ed984e46d65b0046"><td class="memTemplParams" colspan="2">template&lt;typename PointT &gt; </td></tr>
<tr class="memitem:ga4d12b955edd61947ed984e46d65b0046"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4d12b955edd61947ed984e46d65b0046">pcl::copyPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, int top, int bottom, int left, int right, pcl::InterpolationType border_type, const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;value)</td></tr>
<tr class="memdesc:ga4d12b955edd61947ed984e46d65b0046"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a point cloud inside a larger one interpolating borders.  <a href="group__common.html#ga4d12b955edd61947ed984e46d65b0046">更多...</a><br /></td></tr>
<tr class="separator:ga4d12b955edd61947ed984e46d65b0046"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6add803f86fd16a998dce541e9ef402"><td class="memTemplParams" colspan="2">template&lt;typename PointIn1T , typename PointIn2T , typename PointOutT &gt; </td></tr>
<tr class="memitem:gac6add803f86fd16a998dce541e9ef402"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac6add803f86fd16a998dce541e9ef402">pcl::concatenateFields</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointIn1T &gt; &amp;cloud1_in, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointIn2T &gt; &amp;cloud2_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;cloud_out)</td></tr>
<tr class="memdesc:gac6add803f86fd16a998dce541e9ef402"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatenate two datasets representing different fields.  <a href="group__common.html#gac6add803f86fd16a998dce541e9ef402">更多...</a><br /></td></tr>
<tr class="separator:gac6add803f86fd16a998dce541e9ef402"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac54f3a282986844fc7a804242504461e"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gac54f3a282986844fc7a804242504461e">pcl::concatenateFields</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud1_in, const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud2_in, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;cloud_out)</td></tr>
<tr class="memdesc:gac54f3a282986844fc7a804242504461e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatenate two datasets representing different fields.  <a href="group__common.html#gac54f3a282986844fc7a804242504461e">更多...</a><br /></td></tr>
<tr class="separator:gac54f3a282986844fc7a804242504461e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6d121a64a02046c1c38485ea1fad953e"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga6d121a64a02046c1c38485ea1fad953e">pcl::getPointCloudAsEigen</a> (const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;in, Eigen::MatrixXf &amp;out)</td></tr>
<tr class="memdesc:ga6d121a64a02046c1c38485ea1fad953e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the XYZ dimensions of a <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> into Eigen format  <a href="group__common.html#ga6d121a64a02046c1c38485ea1fad953e">更多...</a><br /></td></tr>
<tr class="separator:ga6d121a64a02046c1c38485ea1fad953e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7a91d95901fcbac4a753a4212cfbf221"><td class="memItemLeft" align="right" valign="top">PCL_EXPORTS bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga7a91d95901fcbac4a753a4212cfbf221">pcl::getEigenAsPointCloud</a> (Eigen::MatrixXf &amp;in, <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;out)</td></tr>
<tr class="memdesc:ga7a91d95901fcbac4a753a4212cfbf221"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the XYZ dimensions from an Eigen MatrixXf into a <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> message  <a href="group__common.html#ga7a91d95901fcbac4a753a4212cfbf221">更多...</a><br /></td></tr>
<tr class="separator:ga7a91d95901fcbac4a753a4212cfbf221"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4bb19421457db739a96fe4eacf620139"><td class="memTemplParams" colspan="2">template&lt;std::size_t N&gt; </td></tr>
<tr class="memitem:ga4bb19421457db739a96fe4eacf620139"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4bb19421457db739a96fe4eacf620139">pcl::io::swapByte</a> (char *bytes)</td></tr>
<tr class="memdesc:ga4bb19421457db739a96fe4eacf620139"><td class="mdescLeft">&#160;</td><td class="mdescRight">swap bytes order of a char array of length N  <a href="group__common.html#ga4bb19421457db739a96fe4eacf620139">更多...</a><br /></td></tr>
<tr class="separator:ga4bb19421457db739a96fe4eacf620139"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga047d812778a099ab333c847342c4b6bf"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga047d812778a099ab333c847342c4b6bf"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga047d812778a099ab333c847342c4b6bf">pcl::selectNorm</a> (FloatVectorT A, FloatVectorT B, int dim, <a class="el" href="group__common.html#ga9d37f00989a9de11b48deb263649463c">NormType</a> norm_type)</td></tr>
<tr class="memdesc:ga047d812778a099ab333c847342c4b6bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Method that calculates any norm type available, based on the norm_type variable  <a href="group__common.html#ga047d812778a099ab333c847342c4b6bf">更多...</a><br /></td></tr>
<tr class="separator:ga047d812778a099ab333c847342c4b6bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga61d1e988b461de40a26b4e4e9e93ce55"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga61d1e988b461de40a26b4e4e9e93ce55"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga61d1e988b461de40a26b4e4e9e93ce55">pcl::L1_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga61d1e988b461de40a26b4e4e9e93ce55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the L1 norm of the vector between two points  <a href="group__common.html#ga61d1e988b461de40a26b4e4e9e93ce55">更多...</a><br /></td></tr>
<tr class="separator:ga61d1e988b461de40a26b4e4e9e93ce55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf034c4bca3fc85c1e6d27d893c2936a5"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:gaf034c4bca3fc85c1e6d27d893c2936a5"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaf034c4bca3fc85c1e6d27d893c2936a5">pcl::L2_Norm_SQR</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:gaf034c4bca3fc85c1e6d27d893c2936a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the squared L2 norm of the vector between two points  <a href="group__common.html#gaf034c4bca3fc85c1e6d27d893c2936a5">更多...</a><br /></td></tr>
<tr class="separator:gaf034c4bca3fc85c1e6d27d893c2936a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga70456fbb6c67cf3c1229e19c831b30ac"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga70456fbb6c67cf3c1229e19c831b30ac"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga70456fbb6c67cf3c1229e19c831b30ac">pcl::L2_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga70456fbb6c67cf3c1229e19c831b30ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the L2 norm of the vector between two points  <a href="group__common.html#ga70456fbb6c67cf3c1229e19c831b30ac">更多...</a><br /></td></tr>
<tr class="separator:ga70456fbb6c67cf3c1229e19c831b30ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga63fded8c9593744836d761940cab9350"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga63fded8c9593744836d761940cab9350"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga63fded8c9593744836d761940cab9350">pcl::Linf_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga63fded8c9593744836d761940cab9350"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the L-infinity norm of the vector between two points  <a href="group__common.html#ga63fded8c9593744836d761940cab9350">更多...</a><br /></td></tr>
<tr class="separator:ga63fded8c9593744836d761940cab9350"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga45baeaeb21308cd128a7c44ab786552c"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga45baeaeb21308cd128a7c44ab786552c"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga45baeaeb21308cd128a7c44ab786552c">pcl::JM_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga45baeaeb21308cd128a7c44ab786552c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the JM norm of the vector between two points  <a href="group__common.html#ga45baeaeb21308cd128a7c44ab786552c">更多...</a><br /></td></tr>
<tr class="separator:ga45baeaeb21308cd128a7c44ab786552c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0eb2818b6fa817f3ada41296793283a1"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga0eb2818b6fa817f3ada41296793283a1"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga0eb2818b6fa817f3ada41296793283a1">pcl::B_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga0eb2818b6fa817f3ada41296793283a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the B norm of the vector between two points  <a href="group__common.html#ga0eb2818b6fa817f3ada41296793283a1">更多...</a><br /></td></tr>
<tr class="separator:ga0eb2818b6fa817f3ada41296793283a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac986c55a5b8850fec89cd26c46303747"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:gac986c55a5b8850fec89cd26c46303747"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac986c55a5b8850fec89cd26c46303747">pcl::Sublinear_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:gac986c55a5b8850fec89cd26c46303747"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the sublinear norm of the vector between two points  <a href="group__common.html#gac986c55a5b8850fec89cd26c46303747">更多...</a><br /></td></tr>
<tr class="separator:gac986c55a5b8850fec89cd26c46303747"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7e43f6ae7f0607bfdedaea512c510ff8"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga7e43f6ae7f0607bfdedaea512c510ff8"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga7e43f6ae7f0607bfdedaea512c510ff8">pcl::CS_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga7e43f6ae7f0607bfdedaea512c510ff8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the CS norm of the vector between two points  <a href="group__common.html#ga7e43f6ae7f0607bfdedaea512c510ff8">更多...</a><br /></td></tr>
<tr class="separator:ga7e43f6ae7f0607bfdedaea512c510ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae8b5c722d30c22652327a1481528224e"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:gae8b5c722d30c22652327a1481528224e"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gae8b5c722d30c22652327a1481528224e">pcl::Div_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:gae8b5c722d30c22652327a1481528224e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the div norm of the vector between two points  <a href="group__common.html#gae8b5c722d30c22652327a1481528224e">更多...</a><br /></td></tr>
<tr class="separator:gae8b5c722d30c22652327a1481528224e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf977fbc818d41de61285d1da0521991a"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:gaf977fbc818d41de61285d1da0521991a"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaf977fbc818d41de61285d1da0521991a">pcl::PF_Norm</a> (FloatVectorT A, FloatVectorT B, int dim, float P1, float P2)</td></tr>
<tr class="memdesc:gaf977fbc818d41de61285d1da0521991a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the PF norm of the vector between two points  <a href="group__common.html#gaf977fbc818d41de61285d1da0521991a">更多...</a><br /></td></tr>
<tr class="separator:gaf977fbc818d41de61285d1da0521991a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4df86a6dafef9778fb8df865ad54e28f"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga4df86a6dafef9778fb8df865ad54e28f"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga4df86a6dafef9778fb8df865ad54e28f">pcl::K_Norm</a> (FloatVectorT A, FloatVectorT B, int dim, float P1, float P2)</td></tr>
<tr class="memdesc:ga4df86a6dafef9778fb8df865ad54e28f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the K norm of the vector between two points  <a href="group__common.html#ga4df86a6dafef9778fb8df865ad54e28f">更多...</a><br /></td></tr>
<tr class="separator:ga4df86a6dafef9778fb8df865ad54e28f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga186a26b9face0cfb0fea3d6eb37f909b"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga186a26b9face0cfb0fea3d6eb37f909b"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga186a26b9face0cfb0fea3d6eb37f909b">pcl::KL_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga186a26b9face0cfb0fea3d6eb37f909b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the KL between two discrete probability density functions  <a href="group__common.html#ga186a26b9face0cfb0fea3d6eb37f909b">更多...</a><br /></td></tr>
<tr class="separator:ga186a26b9face0cfb0fea3d6eb37f909b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga86297c76ef1756ff1db90d8e39c14fa3"><td class="memTemplParams" colspan="2">template&lt;typename FloatVectorT &gt; </td></tr>
<tr class="memitem:ga86297c76ef1756ff1db90d8e39c14fa3"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga86297c76ef1756ff1db90d8e39c14fa3">pcl::HIK_Norm</a> (FloatVectorT A, FloatVectorT B, int dim)</td></tr>
<tr class="memdesc:ga86297c76ef1756ff1db90d8e39c14fa3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the HIK norm of the vector between two points  <a href="group__common.html#ga86297c76ef1756ff1db90d8e39c14fa3">更多...</a><br /></td></tr>
<tr class="separator:ga86297c76ef1756ff1db90d8e39c14fa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga52d532f7f2b4d7bba78d13701d3a33d8"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga52d532f7f2b4d7bba78d13701d3a33d8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga52d532f7f2b4d7bba78d13701d3a33d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply an affine transform defined by an Eigen Transform  <a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">更多...</a><br /></td></tr>
<tr class="separator:ga52d532f7f2b4d7bba78d13701d3a33d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76dfccbfb85ec0b318be578916cd4036"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga76dfccbfb85ec0b318be578916cd4036"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga76dfccbfb85ec0b318be578916cd4036">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga76dfccbfb85ec0b318be578916cd4036"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply an affine transform defined by an Eigen Transform  <a href="group__common.html#ga76dfccbfb85ec0b318be578916cd4036">更多...</a><br /></td></tr>
<tr class="separator:ga76dfccbfb85ec0b318be578916cd4036"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa9afb23505913d26d9a1f06242d8eefa"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaa9afb23505913d26d9a1f06242d8eefa"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaa9afb23505913d26d9a1f06242d8eefa">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:gaa9afb23505913d26d9a1f06242d8eefa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply an affine transform defined by an Eigen Transform  <a href="group__common.html#gaa9afb23505913d26d9a1f06242d8eefa">更多...</a><br /></td></tr>
<tr class="separator:gaa9afb23505913d26d9a1f06242d8eefa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac841d05d13c925f3a3a8090d9d7ff24d"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gac841d05d13c925f3a3a8090d9d7ff24d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gac841d05d13c925f3a3a8090d9d7ff24d">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:gac841d05d13c925f3a3a8090d9d7ff24d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply a rigid transform defined by a 4x4 matrix  <a href="group__common.html#gac841d05d13c925f3a3a8090d9d7ff24d">更多...</a><br /></td></tr>
<tr class="separator:gac841d05d13c925f3a3a8090d9d7ff24d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf18e63375b760f7030ee1e96a1d10261"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaf18e63375b760f7030ee1e96a1d10261"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaf18e63375b760f7030ee1e96a1d10261">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:gaf18e63375b760f7030ee1e96a1d10261"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply a rigid transform defined by a 4x4 matrix  <a href="group__common.html#gaf18e63375b760f7030ee1e96a1d10261">更多...</a><br /></td></tr>
<tr class="separator:gaf18e63375b760f7030ee1e96a1d10261"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga033e051c786ec84f52598ab711a74a4e"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga033e051c786ec84f52598ab711a74a4e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga033e051c786ec84f52598ab711a74a4e">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga033e051c786ec84f52598ab711a74a4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply a rigid transform defined by a 4x4 matrix  <a href="group__common.html#ga033e051c786ec84f52598ab711a74a4e">更多...</a><br /></td></tr>
<tr class="separator:ga033e051c786ec84f52598ab711a74a4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga01dcf9e24dec3109a0c8a8b8f2e24bcc"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga01dcf9e24dec3109a0c8a8b8f2e24bcc"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga01dcf9e24dec3109a0c8a8b8f2e24bcc">pcl::transformPointCloudWithNormals</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga01dcf9e24dec3109a0c8a8b8f2e24bcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point cloud and rotate its normals using an Eigen transform.  <a href="group__common.html#ga01dcf9e24dec3109a0c8a8b8f2e24bcc">更多...</a><br /></td></tr>
<tr class="separator:ga01dcf9e24dec3109a0c8a8b8f2e24bcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae4ec94bbea2388f1399bccc96d3724ee"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gae4ec94bbea2388f1399bccc96d3724ee"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gae4ec94bbea2388f1399bccc96d3724ee">pcl::transformPointCloudWithNormals</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:gae4ec94bbea2388f1399bccc96d3724ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point cloud and rotate its normals using an Eigen transform.  <a href="group__common.html#gae4ec94bbea2388f1399bccc96d3724ee">更多...</a><br /></td></tr>
<tr class="separator:gae4ec94bbea2388f1399bccc96d3724ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3a78021ef33dad9e3d44e6275768760b"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga3a78021ef33dad9e3d44e6275768760b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga3a78021ef33dad9e3d44e6275768760b">pcl::transformPointCloudWithNormals</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga3a78021ef33dad9e3d44e6275768760b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point cloud and rotate its normals using an Eigen transform.  <a href="group__common.html#ga3a78021ef33dad9e3d44e6275768760b">更多...</a><br /></td></tr>
<tr class="separator:ga3a78021ef33dad9e3d44e6275768760b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaff524851ffbcbefdbef2277134382906"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:gaff524851ffbcbefdbef2277134382906"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#gaff524851ffbcbefdbef2277134382906">pcl::transformPointCloud</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 3, 1 &gt; &amp;offset, const Eigen::Quaternion&lt; Scalar &gt; &amp;rotation, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:gaff524851ffbcbefdbef2277134382906"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply a rigid transform defined by a 3D offset and a quaternion  <a href="group__common.html#gaff524851ffbcbefdbef2277134382906">更多...</a><br /></td></tr>
<tr class="separator:gaff524851ffbcbefdbef2277134382906"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1d67c0cd4ebb26d770c338d93884974a"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga1d67c0cd4ebb26d770c338d93884974a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga1d67c0cd4ebb26d770c338d93884974a">pcl::transformPointCloudWithNormals</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_in, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 3, 1 &gt; &amp;offset, const Eigen::Quaternion&lt; Scalar &gt; &amp;rotation, bool copy_all_fields=true)</td></tr>
<tr class="memdesc:ga1d67c0cd4ebb26d770c338d93884974a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point cloud and rotate its normals using an Eigen transform.  <a href="group__common.html#ga1d67c0cd4ebb26d770c338d93884974a">更多...</a><br /></td></tr>
<tr class="separator:ga1d67c0cd4ebb26d770c338d93884974a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1bd2c5ea1258af3a45483dd1341aa429"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga1bd2c5ea1258af3a45483dd1341aa429"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga1bd2c5ea1258af3a45483dd1341aa429">pcl::transformPoint</a> (const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;point, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform)</td></tr>
<tr class="memdesc:ga1bd2c5ea1258af3a45483dd1341aa429"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point with members x,y,z  <a href="group__common.html#ga1bd2c5ea1258af3a45483dd1341aa429">更多...</a><br /></td></tr>
<tr class="separator:ga1bd2c5ea1258af3a45483dd1341aa429"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6eddef43d5bd5211fcbd774c87962314"><td class="memTemplParams" colspan="2">template&lt;typename PointT , typename Scalar &gt; </td></tr>
<tr class="memitem:ga6eddef43d5bd5211fcbd774c87962314"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__common.html#ga6eddef43d5bd5211fcbd774c87962314">pcl::transformPointWithNormal</a> (const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;point, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform)</td></tr>
<tr class="memdesc:ga6eddef43d5bd5211fcbd774c87962314"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transform a point with members x,y,z,normal_x,normal_y,normal_z  <a href="group__common.html#ga6eddef43d5bd5211fcbd774c87962314">更多...</a><br /></td></tr>
<tr class="separator:ga6eddef43d5bd5211fcbd774c87962314"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9683d853583c45c7bc4da676bc46ec7d"><td class="memItemLeft" align="right" valign="top"><a id="ga9683d853583c45c7bc4da676bc46ec7d"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#ga9683d853583c45c7bc4da676bc46ec7d">pcl::isBetterCorrespondence</a> (const <a class="el" href="structpcl_1_1_correspondence.html">Correspondence</a> &amp;pc1, const <a class="el" href="structpcl_1_1_correspondence.html">Correspondence</a> &amp;pc2)</td></tr>
<tr class="memdesc:ga9683d853583c45c7bc4da676bc46ec7d"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classpcl_1_1_comparator.html" title="Comparator is the base class for comparators that compare two points given some function....">Comparator</a> to enable us to sort a vector of PointCorrespondences according to their scores using std::sort (begin(), end(), isBetterCorrespondence); <br /></td></tr>
<tr class="separator:ga9683d853583c45c7bc4da676bc46ec7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<h2 class="groupheader">枚举类型说明</h2>
<a id="ga9d37f00989a9de11b48deb263649463c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9d37f00989a9de11b48deb263649463c">&#9670;&nbsp;</a></span>NormType</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__common.html#ga9d37f00989a9de11b48deb263649463c">pcl::NormType</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Enum that defines all the types of norms available. </p>
<dl class="section note"><dt>注解</dt><dd>Any new norm type should have its own enum value and its own case in the selectNorm () method </dd></dl>
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;{L1, L2_SQR, L2, LINF, JM, B, SUBLINEAR, CS, DIV, PF, K, KL, HIK};</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="ga0eb2818b6fa817f3ada41296793283a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0eb2818b6fa817f3ada41296793283a1">&#9670;&nbsp;</a></span>B_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::B_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the B norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="keywordtype">float</span> norm = 0.0, result;</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    norm += std::sqrt (a[i] * b[i]);</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keywordflow">if</span> (norm &gt; 0)</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    result = -logf (norm);</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    result = 0;</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga1a9e18520c49be76f2a28834e2da8a56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1a9e18520c49be76f2a28834e2da8a56">&#9670;&nbsp;</a></span>calculatePolygonArea()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::calculatePolygonArea </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>polygon</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate the area of a polygon given a point cloud that defines the polygon </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">polygon</td><td>point cloud that contains those vertices that comprises the polygon. <a class="el" href="structpcl_1_1_vertices.html" title="Describes a set of vertices in a polygon mesh, by basically storing an array of indices.">Vertices</a> are stored in counterclockwise. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the polygon area </dd></dl>
<div class="fragment"><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;{</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  <span class="keywordtype">float</span> area = 0.0f;</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  <span class="keywordtype">int</span> num_points = polygon.size ();</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keywordtype">int</span> j = 0;</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  Eigen::Vector3f va,vb,res;</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  res(0) = res(1) = res(2) = 0.0f;</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; num_points; ++i) </div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  {</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    j = (i + 1) % num_points;</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    va = polygon[i].getVector3fMap ();</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    vb = polygon[j].getVector3fMap ();</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    res += va.cross (vb);</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  }</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  area = res.norm ();</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  <span class="keywordflow">return</span> (area*0.5);</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga057c72764dfcd1276f7fe19bbfb380a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga057c72764dfcd1276f7fe19bbfb380a7">&#9670;&nbsp;</a></span>compute3DCentroid() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::compute3DCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3D (X-Y-Z) centroid of a set of points using their indices and return it as a 3D vector. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the centroid. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<dl class="section note"><dt>注解</dt><dd>if return value is 0, the centroid is not changed, thus not valid. The last compononent of the vector is set to 1, this allow to transform the centroid vector with 4x4 matrices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;{</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (cloud, indices.indices, centroid));</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_gaf5729fae15603888b49743b118025290"><div class="ttname"><a href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a></div><div class="ttdeci">unsigned int compute3DCentroid(ConstCloudIterator&lt; PointT &gt; &amp;cloud_iterator, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</div><div class="ttdoc">Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.</div><div class="ttdef"><b>Definition:</b> centroid.hpp:50</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gaef1048c26d7ee3cad4ae9436d1f4a5d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaef1048c26d7ee3cad4ae9436d1f4a5d6">&#9670;&nbsp;</a></span>compute3DCentroid() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::compute3DCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3D (X-Y-Z) centroid of a set of points using their indices and return it as a 3D vector. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the centroid. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<dl class="section note"><dt>注解</dt><dd>if return value is 0, the centroid is not changed, thus not valid. The last compononent of the vector is set to 1, this allow to transform the centroid vector with 4x4 matrices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;{</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">if</span> (indices.empty ())</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="comment">// Initialize to 0</span></div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  centroid.setZero ();</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  {</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    {</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      centroid[0] += cloud[indices[i]].x;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      centroid[1] += cloud[indices[i]].y;</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      centroid[2] += cloud[indices[i]].z;</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    }</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    centroid[3] = 1;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (indices.size ()));</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  }</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordtype">unsigned</span> cp = 0;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    {</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud [indices[i]]))</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      centroid[0] += cloud[indices[i]].x;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      centroid[1] += cloud[indices[i]].y;</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      centroid[2] += cloud[indices[i]].z;</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      ++cp;</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    }</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (cp);</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    centroid[3] = 1;</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordflow">return</span> (cp);</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  }</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a3ca88d8ebf6f4f35acbc31cdfb38aa94"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">pcl::PointCloud::is_dense</a></div><div class="ttdeci">bool is_dense</div><div class="ttdoc">True if no points are invalid (e.g., have NaN or Inf values).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:418</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga26f5d53ac5362b04a5c8ed68c4c39038"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga26f5d53ac5362b04a5c8ed68c4c39038">&#9670;&nbsp;</a></span>compute3DCentroid() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::compute3DCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the centroid. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<dl class="section note"><dt>注解</dt><dd>if return value is 0, the centroid is not changed, thus not valid. The last compononent of the vector is set to 1, this allow to transform the centroid vector with 4x4 matrices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;{</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordflow">if</span> (cloud.empty ())</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="comment">// Initialize to 0</span></div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  centroid.setZero ();</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  {</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    {</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      centroid[0] += cloud[i].x;</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;      centroid[1] += cloud[i].y;</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;      centroid[2] += cloud[i].z;</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    }</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (cloud.size ());</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    centroid[3] = 1;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (cloud.size ()));</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  }</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  {</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordtype">unsigned</span> cp = 0;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    {</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud [i]))</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;      centroid[0] += cloud[i].x;</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;      centroid[1] += cloud[i].y;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      centroid[2] += cloud[i].z;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;      ++cp;</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (cp);</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    centroid[3] = 1;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">return</span> (cp);</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  }</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf5729fae15603888b49743b118025290"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf5729fae15603888b49743b118025290">&#9670;&nbsp;</a></span>compute3DCentroid() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::compute3DCentroid </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_iterator</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_iterator</td><td>an iterator over the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the centroid. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<dl class="section note"><dt>注解</dt><dd>if return value is 0, the centroid is not changed, thus not valid. The last compononent of the vector is set to 1, this allow to transform the centroid vector with 4x4 matrices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;{</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  <span class="comment">// Initialize to 0</span></div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  centroid.setZero ();</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  </div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keywordtype">unsigned</span> cp = 0;</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="keywordflow">while</span> (cloud_iterator.isValid ())</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  {</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keywordflow">if</span> (pcl::isFinite (*cloud_iterator))</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    {</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;      centroid[0] += cloud_iterator-&gt;x;</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      centroid[1] += cloud_iterator-&gt;y;</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      centroid[2] += cloud_iterator-&gt;z;</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      ++cp;</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    }</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    ++cloud_iterator;</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  }</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (cp);</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  centroid[3] = 1;</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">return</span> (cp);</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga02e71a096abe1156be18c6322c0728c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga02e71a096abe1156be18c6322c0728c0">&#9670;&nbsp;</a></span>computeCentroid() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">size_t pcl::computeCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointOutT &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Compute the centroid of a set of points and return it as a point. </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td></td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>This is an overloaded function provided for convenience. See the documentation for <a class="el" href="group__common.html#ga02e71a096abe1156be18c6322c0728c0">computeCentroid()</a>. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;{</div>
<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;  <a class="code" href="classpcl_1_1_centroid_point.html">pcl::CentroidPoint&lt;PointInT&gt;</a> cp;</div>
<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160; </div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;      cp.add (cloud[indices[i]]);</div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;      <span class="keywordflow">if</span> (pcl::isFinite (cloud[indices[i]]))</div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        cp.add (cloud[indices[i]]);</div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160; </div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;  cp.get (centroid);</div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;  <span class="keywordflow">return</span> (cp.getSize ());</div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_centroid_point_html"><div class="ttname"><a href="classpcl_1_1_centroid_point.html">pcl::CentroidPoint</a></div><div class="ttdef"><b>Definition:</b> centroid.h:1038</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga65222f7a25f5de1aff9b07d2aea361b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga65222f7a25f5de1aff9b07d2aea361b1">&#9670;&nbsp;</a></span>computeCentroid() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">size_t pcl::computeCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointOutT &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Compute the centroid of a set of points and return it as a point.</p>
<p>Implementation leverages <a class="el" href="classpcl_1_1_centroid_point.html">CentroidPoint</a> class and therefore behaves differently from <a class="el" href="group__common.html#gaf5729fae15603888b49743b118025290">compute3DCentroid()</a> and <a class="el" href="group__common.html#ga4d047d6f7b50a2d81306cc59ac927179">computeNDCentroid()</a>. See <a class="el" href="classpcl_1_1_centroid_point.html">CentroidPoint</a> documentation for explanation.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>output centroid</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid points used to determine the centroid (will be the same as the size of the cloud if it is dense)</dd></dl>
<dl class="section note"><dt>注解</dt><dd>If return value is <code>0</code>, then the centroid is not changed, thus is not valid. </dd></dl>
<div class="fragment"><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;{</div>
<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;  <a class="code" href="classpcl_1_1_centroid_point.html">pcl::CentroidPoint&lt;PointInT&gt;</a> cp;</div>
<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160; </div>
<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;      cp.add (cloud[i]);</div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;      <span class="keywordflow">if</span> (pcl::isFinite (cloud[i]))</div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        cp.add (cloud[i]);</div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160; </div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;  cp.get (centroid);</div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;  <span class="keywordflow">return</span> (cp.getSize ());</div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga11c9b186d04d2e8a868e058473214622"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga11c9b186d04d2e8a868e058473214622">&#9670;&nbsp;</a></span>computeCorrespondingEigenVector()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::computeCorrespondingEigenVector </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const typename Matrix::Scalar &amp;&#160;</td>
          <td class="paramname"><em>eigenvalue</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>eigenvector</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determines the corresponding eigenvector to the given eigenvalue of the symmetric positive semi definite input matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>symmetric positive semi definite input matrix </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">eigenvalue</td><td>the eigenvalue which corresponding eigenvector is to be computed </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvector</td><td>the corresponding eigenvector for the input eigenvalue </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;{</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="comment">// Scale the matrix so its entries are in [-1,1].  The scaling is applied</span></div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <span class="comment">// only when at least one matrix entry has magnitude larger than 1.</span></div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  Scalar scale = mat.cwiseAbs ().maxCoeff ();</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  <span class="keywordflow">if</span> (scale &lt;= std::numeric_limits &lt; Scalar &gt; ::min ())</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    scale = Scalar (1.0);</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160; </div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  Matrix scaledMat = mat / scale;</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160; </div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  scaledMat.diagonal ().array () -= eigenvalue / scale;</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  Vector vec1 = scaledMat.row (0).cross (scaledMat.row (1));</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  Vector vec2 = scaledMat.row (0).cross (scaledMat.row (2));</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  Vector vec3 = scaledMat.row (1).cross (scaledMat.row (2));</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160; </div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  Scalar len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  Scalar len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  Scalar len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    eigenvector = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    eigenvector = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    eigenvector = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac36b146ec26b1ceb7be43a9ecaa010c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac36b146ec26b1ceb7be43a9ecaa010c4">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[1/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3x3 covariance matrix of a given set of points. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<dl class="section note"><dt>注解</dt><dd>if return value is 0, the covariance matrix is not changed, thus not valid. </dd></dl>

</div>
</div>
<a id="ga35305b1593d5417be615e940383f4ced"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga35305b1593d5417be615e940383f4ced">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[2/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;{</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a> (cloud, indices.indices, centroid, covariance_matrix));</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_gac36b146ec26b1ceb7be43a9ecaa010c4"><div class="ttname"><a href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a></div><div class="ttdeci">unsigned int computeCovarianceMatrix(const pcl::PointCloud&lt; PointT &gt; &amp;cloud, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix)</div><div class="ttdoc">Compute the 3x3 covariance matrix of a given set of points. The result is returned as a Eigen::Matrix...</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gacf3ff94b2145fb22871e41e87ee495b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacf3ff94b2145fb22871e41e87ee495b2">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[3/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>subset of points given by their indices </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;{</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">computeCovarianceMatrix</a> (cloud, indices.indices, covariance_matrix));</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga73df83248bb8d4e74347822811be9359"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga73df83248bb8d4e74347822811be9359">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[4/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Note: the covariance matrix is not normalized with the number of points. For a normalized covariance, please use computeNormalizedCovarianceMatrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;{</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  <span class="keywordflow">if</span> (indices.empty ())</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  <span class="comment">// Initialize to 0</span></div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  covariance_matrix.setZero ();</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  <span class="keywordtype">size_t</span> point_count;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  {</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    point_count = indices.size ();</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; point_count; ++i)</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    {</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;      Eigen::Matrix&lt;Scalar, 4, 1&gt; pt;</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;      pt[0] = cloud[indices[i]].x - centroid[0];</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;      pt[1] = cloud[indices[i]].y - centroid[1];</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      pt[2] = cloud[indices[i]].z - centroid[2];</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;      covariance_matrix (1, 1) += pt.y () * pt.y ();</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;      covariance_matrix (1, 2) += pt.y () * pt.z ();</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;      covariance_matrix (2, 2) += pt.z () * pt.z ();</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;      pt *= pt.x ();</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      covariance_matrix (0, 0) += pt.x ();</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;      covariance_matrix (0, 1) += pt.y ();</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;      covariance_matrix (0, 2) += pt.z ();</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    }</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  }</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  {</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    point_count = 0;</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    {</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud[indices[i]]))</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;      Eigen::Matrix&lt;Scalar, 4, 1&gt; pt;</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;      pt[0] = cloud[indices[i]].x - centroid[0];</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;      pt[1] = cloud[indices[i]].y - centroid[1];</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;      pt[2] = cloud[indices[i]].z - centroid[2];</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;      covariance_matrix (1, 1) += pt.y () * pt.y ();</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      covariance_matrix (1, 2) += pt.y () * pt.z ();</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;      covariance_matrix (2, 2) += pt.z () * pt.z ();</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;      pt *= pt.x ();</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;      covariance_matrix (0, 0) += pt.x ();</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;      covariance_matrix (0, 1) += pt.y ();</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;      covariance_matrix (0, 2) += pt.z ();</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;      ++point_count;</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    }</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  }</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  covariance_matrix (1, 0) = covariance_matrix (0, 1);</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  covariance_matrix (2, 0) = covariance_matrix (0, 2);</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  covariance_matrix (2, 1) = covariance_matrix (1, 2);</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (point_count));</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac33176152049aa1f63867afae8225000"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac33176152049aa1f63867afae8225000">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[5/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>subset of points given by their indices </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;{</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  <span class="comment">// create the buffer on the stack which is much faster than using cloud[indices[i]] and centroid as a buffer</span></div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;  Eigen::Matrix&lt;Scalar, 1, 6, Eigen::RowMajor&gt; accu = Eigen::Matrix&lt;Scalar, 1, 6, Eigen::RowMajor&gt;::Zero ();</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160; </div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> point_count;</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;  {</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    point_count = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    <span class="keywordflow">for</span> (std::vector&lt;int&gt;::const_iterator iIt = indices.begin (); iIt != indices.end (); ++iIt)</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    {</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;      <span class="comment">//const PointT&amp; point = cloud[*iIt];</span></div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;      accu [0] += cloud[*iIt].x * cloud[*iIt].x;</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;      accu [1] += cloud[*iIt].x * cloud[*iIt].y;</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;      accu [2] += cloud[*iIt].x * cloud[*iIt].z;</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;      accu [3] += cloud[*iIt].y * cloud[*iIt].y;</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;      accu [4] += cloud[*iIt].y * cloud[*iIt].z;</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;      accu [5] += cloud[*iIt].z * cloud[*iIt].z;</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    }</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  }</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;  {</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    point_count = 0;</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">for</span> (std::vector&lt;int&gt;::const_iterator iIt = indices.begin (); iIt != indices.end (); ++iIt)</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    {</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud[*iIt]))</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160; </div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;      ++point_count;</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      accu [0] += cloud[*iIt].x * cloud[*iIt].x;</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;      accu [1] += cloud[*iIt].x * cloud[*iIt].y;</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;      accu [2] += cloud[*iIt].x * cloud[*iIt].z;</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;      accu [3] += cloud[*iIt].y * cloud[*iIt].y;</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;      accu [4] += cloud[*iIt].y * cloud[*iIt].z;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      accu [5] += cloud[*iIt].z * cloud[*iIt].z;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    }</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  }</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  {</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    accu /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    covariance_matrix.coeffRef (0) = accu [0];</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    covariance_matrix.coeffRef (1) = covariance_matrix.coeffRef (3) = accu [1];</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    covariance_matrix.coeffRef (2) = covariance_matrix.coeffRef (6) = accu [2];</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    covariance_matrix.coeffRef (4) = accu [3];</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    covariance_matrix.coeffRef (5) = covariance_matrix.coeffRef (7) = accu [4];</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    covariance_matrix.coeffRef (8) = accu [5];</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  }</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;  <span class="keywordflow">return</span> (point_count);</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga5956698bec9ece7a491ad2fbbfbe6bc1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5956698bec9ece7a491ad2fbbfbe6bc1">&#9670;&nbsp;</a></span>computeCovarianceMatrix() <span class="overload">[6/6]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix for a already demeaned point cloud. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;{</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;  <span class="comment">// create the buffer on the stack which is much faster than using cloud[indices[i]] and centroid as a buffer</span></div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  Eigen::Matrix&lt;Scalar, 1, 6, Eigen::RowMajor&gt; accu = Eigen::Matrix&lt;Scalar, 1, 6, Eigen::RowMajor&gt;::Zero ();</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> point_count;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;  {</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    point_count = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (cloud.size ());</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; point_count; ++i)</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    {</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;      accu [0] += cloud[i].x * cloud[i].x;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;      accu [1] += cloud[i].x * cloud[i].y;</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;      accu [2] += cloud[i].x * cloud[i].z;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;      accu [3] += cloud[i].y * cloud[i].y;</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;      accu [4] += cloud[i].y * cloud[i].z;</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;      accu [5] += cloud[i].z * cloud[i].z;</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    }</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  }</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  {</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    point_count = 0;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    {</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud[i]))</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160; </div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;      accu [0] += cloud[i].x * cloud[i].x;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;      accu [1] += cloud[i].x * cloud[i].y;</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;      accu [2] += cloud[i].x * cloud[i].z;</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;      accu [3] += cloud[i].y * cloud[i].y;</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;      accu [4] += cloud[i].y * cloud[i].z;</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;      accu [5] += cloud[i].z * cloud[i].z;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      ++point_count;</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    }</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  }</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  {</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    accu /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    covariance_matrix.coeffRef (0) = accu [0];</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    covariance_matrix.coeffRef (1) = covariance_matrix.coeffRef (3) = accu [1];</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    covariance_matrix.coeffRef (2) = covariance_matrix.coeffRef (6) = accu [2];</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    covariance_matrix.coeffRef (4) = accu [3];</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    covariance_matrix.coeffRef (5) = covariance_matrix.coeffRef (7) = accu [4];</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    covariance_matrix.coeffRef (8) = accu [5];</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  }</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  <span class="keywordflow">return</span> (point_count);</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gab5ea605f439a80daf6348547379bad8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab5ea605f439a80daf6348547379bad8e">&#9670;&nbsp;</a></span>computeCovarianceMatrixNormalized() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrixNormalized </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute normalized the 3x3 covariance matrix of a given set of points. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of points in the point cloud. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  <span class="keywordtype">unsigned</span> point_count = <a class="code" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a> (cloud, centroid, covariance_matrix);</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    covariance_matrix /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="keywordflow">return</span> (point_count);</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gadfb4158efe784f3d3a765f0747b13a80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadfb4158efe784f3d3a765f0747b13a80">&#9670;&nbsp;</a></span>computeCovarianceMatrixNormalized() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrixNormalized </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;{</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> point_count = <a class="code" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a> (cloud, indices.indices, centroid, covariance_matrix);</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    covariance_matrix /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  <span class="keywordflow">return</span> point_count;</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gad8f6fde995ab21ab95267c22c7b12c90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad8f6fde995ab21ab95267c22c7b12c90">&#9670;&nbsp;</a></span>computeCovarianceMatrixNormalized() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeCovarianceMatrixNormalized </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix of a given set of points using their indices. The result is returned as a Eigen::Matrix3f. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, use computeCovarianceMatrix and scale the covariance matrix with 1 / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by the computeCovarianceMatrix function. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;{</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  <span class="keywordtype">unsigned</span> point_count = <a class="code" href="group__common.html#gac36b146ec26b1ceb7be43a9ecaa010c4">pcl::computeCovarianceMatrix</a> (cloud, indices, centroid, covariance_matrix);</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    covariance_matrix /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  <span class="keywordflow">return</span> (point_count);</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac4d7bf1a81f21fb97505c91957b7f033"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac4d7bf1a81f21fb97505c91957b7f033">&#9670;&nbsp;</a></span>computeMeanAndCovarianceMatrix() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeMeanAndCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>subset of points given by their indices </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;{</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">computeMeanAndCovarianceMatrix</a> (cloud, indices.indices, covariance_matrix, centroid));</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga72dfb6e965df9752c88790e026a8ab5f"><div class="ttname"><a href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">pcl::computeMeanAndCovarianceMatrix</a></div><div class="ttdeci">unsigned int computeMeanAndCovarianceMatrix(const pcl::PointCloud&lt; PointT &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</div><div class="ttdoc">Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single lo...</div><div class="ttdef"><b>Definition:</b> centroid.hpp:489</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gad2138293b6dd302ceaa128fae950f27d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad2138293b6dd302ceaa128fae950f27d">&#9670;&nbsp;</a></span>computeMeanAndCovarianceMatrix() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeMeanAndCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>subset of points given by their indices </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;{</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;  <span class="comment">// create the buffer on the stack which is much faster than using cloud[indices[i]] and centroid as a buffer</span></div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  Eigen::Matrix&lt;Scalar, 1, 9, Eigen::RowMajor&gt; accu = Eigen::Matrix&lt;Scalar, 1, 9, Eigen::RowMajor&gt;::Zero ();</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;  <span class="keywordtype">size_t</span> point_count;</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  {</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    point_count = indices.size ();</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keywordflow">for</span> (std::vector&lt;int&gt;::const_iterator iIt = indices.begin (); iIt != indices.end (); ++iIt)</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    {</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;      <span class="comment">//const PointT&amp; point = cloud[*iIt];</span></div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;      accu [0] += cloud[*iIt].x * cloud[*iIt].x;</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;      accu [1] += cloud[*iIt].x * cloud[*iIt].y;</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;      accu [2] += cloud[*iIt].x * cloud[*iIt].z;</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;      accu [3] += cloud[*iIt].y * cloud[*iIt].y;</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;      accu [4] += cloud[*iIt].y * cloud[*iIt].z;</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;      accu [5] += cloud[*iIt].z * cloud[*iIt].z;</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;      accu [6] += cloud[*iIt].x;</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;      accu [7] += cloud[*iIt].y;</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;      accu [8] += cloud[*iIt].z;</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    }</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  }</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  {</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    point_count = 0;</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <span class="keywordflow">for</span> (std::vector&lt;int&gt;::const_iterator iIt = indices.begin (); iIt != indices.end (); ++iIt)</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    {</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud[*iIt]))</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160; </div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;      ++point_count;</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;      accu [0] += cloud[*iIt].x * cloud[*iIt].x;</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;      accu [1] += cloud[*iIt].x * cloud[*iIt].y;</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;      accu [2] += cloud[*iIt].x * cloud[*iIt].z;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      accu [3] += cloud[*iIt].y * cloud[*iIt].y; <span class="comment">// 4</span></div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;      accu [4] += cloud[*iIt].y * cloud[*iIt].z; <span class="comment">// 5</span></div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;      accu [5] += cloud[*iIt].z * cloud[*iIt].z; <span class="comment">// 8</span></div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;      accu [6] += cloud[*iIt].x;</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;      accu [7] += cloud[*iIt].y;</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;      accu [8] += cloud[*iIt].z;</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    }</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;  }</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160; </div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;  accu /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  <span class="comment">//Eigen::Vector3f vec = accu.tail&lt;3&gt; ();</span></div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;  <span class="comment">//centroid.head&lt;3&gt; () = vec;//= accu.tail&lt;3&gt; ();</span></div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;  <span class="comment">//centroid.head&lt;3&gt; () = accu.tail&lt;3&gt; ();    -- does not compile with Clang 3.0</span></div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;  centroid[0] = accu[6]; centroid[1] = accu[7]; centroid[2] = accu[8];</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;  centroid[3] = 1;</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;  covariance_matrix.coeffRef (0) = accu [0] - accu [6] * accu [6];</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;  covariance_matrix.coeffRef (1) = accu [1] - accu [6] * accu [7];</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;  covariance_matrix.coeffRef (2) = accu [2] - accu [6] * accu [8];</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;  covariance_matrix.coeffRef (4) = accu [3] - accu [7] * accu [7];</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  covariance_matrix.coeffRef (5) = accu [4] - accu [7] * accu [8];</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;  covariance_matrix.coeffRef (8) = accu [5] - accu [8] * accu [8];</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  covariance_matrix.coeffRef (3) = covariance_matrix.coeff (1);</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  covariance_matrix.coeffRef (6) = covariance_matrix.coeff (2);</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;  covariance_matrix.coeffRef (7) = covariance_matrix.coeff (5);</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160; </div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (point_count));</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga72dfb6e965df9752c88790e026a8ab5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga72dfb6e965df9752c88790e026a8ab5f">&#9670;&nbsp;</a></span>computeMeanAndCovarianceMatrix() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int pcl::computeMeanAndCovarianceMatrix </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;&#160;</td>
          <td class="paramname"><em>covariance_matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single loop. Normalized means that every entry has been divided by the number of entries in indices. For small number of points, or if you want explicitely the sample-variance, scale the covariance matrix with n / (n-1), where n is the number of points used to calculate the covariance matrix and is returned by this function. </p>
<dl class="section note"><dt>注解</dt><dd>This method is theoretically exact. However using float for internal calculations reduces the accuracy but increases the efficiency. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">covariance_matrix</td><td>the resultant 3x3 covariance matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the centroid of the set of points in the cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>number of valid point used to determine the covariance matrix. In case of dense point clouds, this is the same as the size of input cloud. </dd></dl>
<div class="fragment"><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;{</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="comment">// create the buffer on the stack which is much faster than using cloud[indices[i]] and centroid as a buffer</span></div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  Eigen::Matrix&lt;Scalar, 1, 9, Eigen::RowMajor&gt; accu = Eigen::Matrix&lt;Scalar, 1, 9, Eigen::RowMajor&gt;::Zero ();</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  <span class="keywordtype">size_t</span> point_count;</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  {</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    point_count = cloud.size ();</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="comment">// For each point in the cloud</span></div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; point_count; ++i)</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    {</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;      accu [0] += cloud[i].x * cloud[i].x;</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;      accu [1] += cloud[i].x * cloud[i].y;</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;      accu [2] += cloud[i].x * cloud[i].z;</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;      accu [3] += cloud[i].y * cloud[i].y; <span class="comment">// 4</span></div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;      accu [4] += cloud[i].y * cloud[i].z; <span class="comment">// 5</span></div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;      accu [5] += cloud[i].z * cloud[i].z; <span class="comment">// 8</span></div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;      accu [6] += cloud[i].x;</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;      accu [7] += cloud[i].y;</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;      accu [8] += cloud[i].z;</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    }</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  }</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  {</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    point_count = 0;</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.size (); ++i)</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    {</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;      <span class="keywordflow">if</span> (!isFinite (cloud[i]))</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160; </div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;      accu [0] += cloud[i].x * cloud[i].x;</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;      accu [1] += cloud[i].x * cloud[i].y;</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;      accu [2] += cloud[i].x * cloud[i].z;</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;      accu [3] += cloud[i].y * cloud[i].y;</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;      accu [4] += cloud[i].y * cloud[i].z;</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;      accu [5] += cloud[i].z * cloud[i].z;</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;      accu [6] += cloud[i].x;</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;      accu [7] += cloud[i].y;</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;      accu [8] += cloud[i].z;</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;      ++point_count;</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    }</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  }</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  accu /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (point_count);</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keywordflow">if</span> (point_count != 0)</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  {</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="comment">//centroid.head&lt;3&gt; () = accu.tail&lt;3&gt; ();    -- does not compile with Clang 3.0</span></div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    centroid[0] = accu[6]; centroid[1] = accu[7]; centroid[2] = accu[8];</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    centroid[3] = 1;</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    covariance_matrix.coeffRef (0) = accu [0] - accu [6] * accu [6];</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    covariance_matrix.coeffRef (1) = accu [1] - accu [6] * accu [7];</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    covariance_matrix.coeffRef (2) = accu [2] - accu [6] * accu [8];</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    covariance_matrix.coeffRef (4) = accu [3] - accu [7] * accu [7];</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    covariance_matrix.coeffRef (5) = accu [4] - accu [7] * accu [8];</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    covariance_matrix.coeffRef (8) = accu [5] - accu [8] * accu [8];</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    covariance_matrix.coeffRef (3) = covariance_matrix.coeff (1);</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    covariance_matrix.coeffRef (6) = covariance_matrix.coeff (2);</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    covariance_matrix.coeffRef (7) = covariance_matrix.coeff (5);</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  }</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (point_count));</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga9654681b5a78f1e3ad5566de05e1d638"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9654681b5a78f1e3ad5566de05e1d638">&#9670;&nbsp;</a></span>computeNDCentroid() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::computeNDCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>General, all purpose nD centroid estimation for a set of points using their indices. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;{</div>
<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga4d047d6f7b50a2d81306cc59ac927179">pcl::computeNDCentroid</a> (cloud, indices.indices, centroid));</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga4d047d6f7b50a2d81306cc59ac927179"><div class="ttname"><a href="group__common.html#ga4d047d6f7b50a2d81306cc59ac927179">pcl::computeNDCentroid</a></div><div class="ttdeci">void computeNDCentroid(const pcl::PointCloud&lt; PointT &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;centroid)</div><div class="ttdoc">General, all purpose nD centroid estimation for a set of points using their indices.</div><div class="ttdef"><b>Definition:</b> centroid.hpp:809</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf936744f1fa429ebc22c2544e0d0a747"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf936744f1fa429ebc22c2544e0d0a747">&#9670;&nbsp;</a></span>computeNDCentroid() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::computeNDCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>General, all purpose nD centroid estimation for a set of points using their indices. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramname">indices</td><td>the point cloud indices that need to be used </td></tr>
    <tr><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;{</div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structpcl_1_1traits_1_1field_list.html">pcl::traits::fieldList&lt;PointT&gt;::type</a> FieldList;</div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160; </div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;  <span class="comment">// Get the size of the fields</span></div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;  centroid.setZero (boost::mpl::size&lt;FieldList&gt;::value);</div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160; </div>
<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;  <span class="keywordflow">if</span> (indices.empty ())</div>
<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;  <span class="keywordtype">int</span> nr_points = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; nr_points; ++i)</div>
<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;  {</div>
<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <span class="comment">// Iterate over each dimension</span></div>
<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    pcl::for_each_type &lt;FieldList&gt; (NdCentroidFunctor&lt;PointT, Scalar&gt; (cloud[indices[i]], centroid));</div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;  }</div>
<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;  centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (nr_points);</div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;}</div>
<div class="ttc" id="astructpcl_1_1traits_1_1field_list_html"><div class="ttname"><a href="structpcl_1_1traits_1_1field_list.html">pcl::traits::fieldList</a></div><div class="ttdef"><b>Definition:</b> point_traits.h:177</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4d047d6f7b50a2d81306cc59ac927179"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4d047d6f7b50a2d81306cc59ac927179">&#9670;&nbsp;</a></span>computeNDCentroid() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::computeNDCentroid </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>General, all purpose nD centroid estimation for a set of points using their indices. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the input point cloud </td></tr>
    <tr><td class="paramname">centroid</td><td>the output centroid </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;{</div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structpcl_1_1traits_1_1field_list.html">pcl::traits::fieldList&lt;PointT&gt;::type</a> FieldList;</div>
<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160; </div>
<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;  <span class="comment">// Get the size of the fields</span></div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;  centroid.setZero (boost::mpl::size&lt;FieldList&gt;::value);</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160; </div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;  <span class="keywordflow">if</span> (cloud.empty ())</div>
<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;  <span class="keywordtype">int</span> size = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (cloud.size ());</div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; ++i)</div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;  {</div>
<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="comment">// Iterate over each dimension</span></div>
<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    pcl::for_each_type&lt;FieldList&gt; (NdCentroidFunctor&lt;PointT, Scalar&gt; (cloud[i], centroid));</div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;  }</div>
<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;  centroid /= <span class="keyword">static_cast&lt;</span>Scalar<span class="keyword">&gt;</span> (size);</div>
<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac54f3a282986844fc7a804242504461e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac54f3a282986844fc7a804242504461e">&#9670;&nbsp;</a></span>concatenateFields() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS bool pcl::concatenateFields </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud1_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud2_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Concatenate two datasets representing different fields. </p>
<dl class="section note"><dt>注解</dt><dd>If the input datasets have overlapping fields (i.e., both contain the same fields), then the data in the second cloud (cloud2_in) will overwrite the data in the first (cloud1_in).</dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud1_in</td><td>the first input dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud2_in</td><td>the second input dataset (overwrites the fields of the first dataset for those that are shared) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the output dataset created by concatenating all the fields in the input datasets </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="gac6add803f86fd16a998dce541e9ef402"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac6add803f86fd16a998dce541e9ef402">&#9670;&nbsp;</a></span>concatenateFields() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointIn1T , typename PointIn2T , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::concatenateFields </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointIn1T &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud1_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointIn2T &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud2_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Concatenate two datasets representing different fields. </p>
<dl class="section note"><dt>注解</dt><dd>If the input datasets have overlapping fields (i.e., both contain the same fields), then the data in the second cloud (cloud2_in) will overwrite the data in the first (cloud1_in).</dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud1_in</td><td>the first input dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud2_in</td><td>the second input dataset (overwrites the fields of the first dataset for those that are shared) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output dataset created by the concatenation of all the fields in the input datasets </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;{</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structpcl_1_1traits_1_1field_list.html">pcl::traits::fieldList&lt;PointIn1T&gt;::type</a> FieldList1;</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structpcl_1_1traits_1_1field_list.html">pcl::traits::fieldList&lt;PointIn2T&gt;::type</a> FieldList2;</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  <span class="keywordflow">if</span> (cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () != cloud2_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;  {</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::concatenateFields] The number of points in the two input datasets differs!\n&quot;</span>);</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  }</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160; </div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="comment">// Resize the output dataset</span></div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  <span class="keywordflow">if</span> (!cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> || !cloud2_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  {</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="comment">// Iterate over each dimension</span></div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    pcl::for_each_type &lt;FieldList1&gt; (<a class="code" href="structpcl_1_1_nd_concatenate_functor.html">pcl::NdConcatenateFunctor &lt;PointIn1T, PointOutT&gt;</a> (cloud1_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i]));</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    pcl::for_each_type &lt;FieldList2&gt; (<a class="code" href="structpcl_1_1_nd_concatenate_functor.html">pcl::NdConcatenateFunctor &lt;PointIn2T, PointOutT&gt;</a> (cloud2_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i]));</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;  }</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2185a6453f8ad905d7bdf7b45754a160"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">pcl::PointCloud::width</a></div><div class="ttdeci">uint32_t width</div><div class="ttdoc">The point cloud width (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:413</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a4f34b45220c57f96607513ffad0d9582"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">pcl::PointCloud::height</a></div><div class="ttdeci">uint32_t height</div><div class="ttdoc">The point cloud height (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:415</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a82e0be055a617e5e74102ed62712b352"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">pcl::PointCloud::header</a></div><div class="ttdeci">pcl::PCLHeader header</div><div class="ttdoc">The point cloud header. It contains information about the acquisition time.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:407</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_af16a62638198313b9c093127c492c884"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">pcl::PointCloud::points</a></div><div class="ttdeci">std::vector&lt; PointT, Eigen::aligned_allocator&lt; PointT &gt; &gt; points</div><div class="ttdoc">The point data.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:410</div></div>
<div class="ttc" id="astructpcl_1_1_nd_concatenate_functor_html"><div class="ttname"><a href="structpcl_1_1_nd_concatenate_functor.html">pcl::NdConcatenateFunctor</a></div><div class="ttdoc">Helper functor structure for concatenate.</div><div class="ttdef"><b>Definition:</b> concatenate.h:65</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gaaebfbeb8e50f90057188131228b2e8b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaaebfbeb8e50f90057188131228b2e8b6">&#9670;&nbsp;</a></span>concatenatePointCloud()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS bool pcl::concatenatePointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Concatenate two <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a>. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud1</td><td>the first input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud2</td><td>the second input point cloud dataset </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>true if successful, false if failed (e.g., name/number of fields differs) </dd></dl>

</div>
</div>
<a id="gab978bf1754771246b2f140a5b52a8f8b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab978bf1754771246b2f140a5b52a8f8b">&#9670;&nbsp;</a></span>copyPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPoint </td>
          <td>(</td>
          <td class="paramtype">const PointInT &amp;&#160;</td>
          <td class="paramname"><em>point_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointOutT &amp;&#160;</td>
          <td class="paramname"><em>point_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the fields of a source point into a target point. </p>
<p>If the source and the target point types are the same, then a complete copy is made. Otherwise only those fields that the two point types share in common are copied.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">point_in</td><td>the source point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">point_out</td><td>the target point </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;{</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  detail::CopyPointHelper&lt;PointInT, PointOutT&gt; copy;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  copy (point_in, point_out);</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaa65b1c8d782e7b776ae682679d2d948f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa65b1c8d782e7b776ae682679d2d948f">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[1/13]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>

</div>
</div>
<a id="ga6052086912991a41541e3f1e40555a05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6052086912991a41541e3f1e40555a05">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[2/13]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>

</div>
</div>
<a id="ga1c6c02fe197e0ea6ca249c46dda0e602"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1c6c02fe197e0ea6ca249c46dda0e602">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[3/13]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy fields and point cloud data from <em>cloud_in</em> to <em>cloud_out</em> </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga67ab079e174e900e6e0b235fb88d7160"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga67ab079e174e900e6e0b235fb88d7160">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[4/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> structure representing the points to be copied from cloud_in </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;{</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  <a class="code" href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">copyPointCloud</a> (cloud_in, indices.indices, cloud_out);</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_gaa65b1c8d782e7b776ae682679d2d948f"><div class="ttname"><a href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a></div><div class="ttdeci">PCL_EXPORTS void copyPointCloud(const pcl::PCLPointCloud2 &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, pcl::PCLPointCloud2 &amp;cloud_out)</div><div class="ttdoc">Extract the indices of a given point cloud as a new point cloud</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4e98fb8923a6d8c4dab35ff96c7b1dd6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4e98fb8923a6d8c4dab35ff96c7b1dd6">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[5/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;{</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (indices.size ());</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = uint32_t (indices.size ());</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <a class="code" href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">copyPoint</a> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i]);</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a5de17e88bdf15e1c4fd1bcc6b85b1941"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">pcl::PointCloud::sensor_orientation_</a></div><div class="ttdeci">Eigen::Quaternionf sensor_orientation_</div><div class="ttdoc">Sensor acquisition pose (rotation).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:423</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_aad7c2cd4b0d1c7f0fbc096276b5e2230"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">pcl::PointCloud::sensor_origin_</a></div><div class="ttdeci">Eigen::Vector4f sensor_origin_</div><div class="ttdoc">Sensor acquisition pose (origin/translation).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:421</div></div>
<div class="ttc" id="agroup__common_html_gab978bf1754771246b2f140a5b52a8f8b"><div class="ttname"><a href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">pcl::copyPoint</a></div><div class="ttdeci">void copyPoint(const PointInT &amp;point_in, PointOutT &amp;point_out)</div><div class="ttdoc">Copy the fields of a source point into a target point.</div><div class="ttdef"><b>Definition:</b> copy_point.hpp:138</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gafeb71f88a4e674ec4d156d013c8bb393"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafeb71f88a4e674ec4d156d013c8bb393">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[6/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (indices.size ());</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <a class="code" href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">copyPoint</a> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i]);</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaa5ab28ac738a42a65f9f2033d6b33252"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa5ab28ac738a42a65f9f2033d6b33252">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[7/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from cloud_in </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;{</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  <span class="keywordtype">int</span> nr_p = 0;</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    nr_p += indices[i].indices.size ();</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  <span class="comment">// Do we want to copy everything? Remember we assume UNIQUE indices</span></div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  <span class="keywordflow">if</span> (nr_p == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  {</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    copyPointCloud&lt;PointInT, PointOutT&gt; (cloud_in, cloud_out);</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  }</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160; </div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (nr_p);</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = nr_p;</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160; </div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  <span class="comment">// Iterate over each cluster</span></div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  <span class="keywordtype">int</span> cp = 0;</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> cc = 0; cc &lt; indices.size (); ++cc)</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  {</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="comment">// Iterate over each idx</span></div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices[cc].indices.size (); ++i)</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    {</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;      <a class="code" href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">copyPoint</a> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[cc].indices[i]], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[cp]);</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;      ++cp;</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    }</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  }</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaff182bca8d0295d727baaa1fd368c6ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaff182bca8d0295d727baaa1fd368c6ad">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[8/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy all the fields from a given point cloud into a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;{</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="keywordflow">if</span> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () == 0)</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordflow">if</span> (isSamePointType&lt;PointInT, PointOutT&gt; ())</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="comment">// Copy the whole memory block</span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    memcpy (&amp;cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0], &amp;cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0], cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () * sizeof (PointInT));</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      <a class="code" href="group__common.html#gab978bf1754771246b2f140a5b52a8f8b">copyPoint</a> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i], cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i]);</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga44ece0c2faffdb26cd75417200454577"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga44ece0c2faffdb26cd75417200454577">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[9/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> structure representing the points to be copied from cloud_in </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;{</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="comment">// Do we want to copy everything?</span></div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  <span class="keywordflow">if</span> (indices.indices.size () == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  {</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    cloud_out = cloud_in;</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  }</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (indices.indices.size ());</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = indices.indices.size ();</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.indices.size (); ++i)</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]];</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gab99511f54b952b8a5608e4ed7f41a68d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab99511f54b952b8a5608e4ed7f41a68d">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[10/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="comment">// Do we want to copy everything?</span></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keywordflow">if</span> (indices.size () == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  {</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    cloud_out = cloud_in;</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  }</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (indices.size ());</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(indices.size ());</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]];</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga6531a806d1c7ac0d5c23f79f673db191"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6531a806d1c7ac0d5c23f79f673db191">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[11/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int, Eigen::aligned_allocator&lt; int &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;{</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="comment">// Do we want to copy everything?</span></div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordflow">if</span> (indices.size () == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  {</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    cloud_out = cloud_in;</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  }</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (indices.size ());</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="comment">// Iterate over each point</span></div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]];</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaafe5bf1194ffaad83a2fc04cde6b20e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaafe5bf1194ffaad83a2fc04cde6b20e4">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[12/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the indices of a given point cloud as a new point cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the vector of indices representing the points to be copied from <em>cloud_in</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Assumes unique indices. </dd></dl>
<div class="fragment"><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;{</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  <span class="keywordtype">int</span> nr_p = 0;</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    nr_p += indices[i].indices.size ();</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  <span class="comment">// Do we want to copy everything? Remember we assume UNIQUE indices</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  <span class="keywordflow">if</span> (nr_p == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  {</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    cloud_out = cloud_in;</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  }</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (nr_p);</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = nr_p;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  <span class="comment">// Iterate over each cluster</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordtype">int</span> cp = 0;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> cc = 0; cc &lt; indices.size (); ++cc)</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  {</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="comment">// Iterate over each idx</span></div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices[cc].indices.size (); ++i)</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    {</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;      <span class="comment">// Iterate over each dimension</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;      cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[cp] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[cc].indices[i]];</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;      cp++;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    }</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  }</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4d12b955edd61947ed984e46d65b0046"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4d12b955edd61947ed984e46d65b0046">&#9670;&nbsp;</a></span>copyPointCloud() <span class="overload">[13/13]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::copyPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>top</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>left</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>right</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">pcl::InterpolationType&#160;</td>
          <td class="paramname"><em>border_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy a point cloud inside a larger one interpolating borders. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud dataset </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud dataset </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">top</td><td></td></tr>
    <tr><td class="paramdir"></td><td class="paramname">bottom</td><td></td></tr>
    <tr><td class="paramdir"></td><td class="paramname">left</td><td></td></tr>
    <tr><td class="paramdir"></td><td class="paramname">right</td><td>Position of cloud_in inside cloud_out is given by <em>top</em>, <em>left</em>, <em>bottom</em> <em>right</em>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">border_type</td><td>the interpolating method (pcl::BORDER_XXX) BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh BORDER_REFLECT: fedcba|abcdefgh|hgfedcb BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba BORDER_WRAP: cdefgh|abcdefgh|abcdefg BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified 'i' BORDER_TRANSPARENT: mnopqr|abcdefgh|tuvwxyz where m-r and t-z are orignal values of cloud_out </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">value</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="exception"><dt>异常</dt><dd>
  <table class="exception">
    <tr><td class="paramname"><a class="el" href="classpcl_1_1_bad_argument_exception.html" title="An exception that is thrown when the argments number or type is wrong/unhandled.">pcl::BadArgumentException</a></td><td>if any of top, bottom, left or right is negative. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;{</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  <span class="keywordflow">if</span> (top &lt; 0 || left &lt; 0 || bottom &lt; 0 || right &lt; 0)</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  {</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    std::string faulty = (top &lt; 0) ? <span class="stringliteral">&quot;top&quot;</span> : (left &lt; 0) ? <span class="stringliteral">&quot;left&quot;</span> : (bottom &lt; 0) ? <span class="stringliteral">&quot;bottom&quot;</span> : <span class="stringliteral">&quot;right&quot;</span>;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    PCL_THROW_EXCEPTION (<a class="code" href="classpcl_1_1_bad_argument_exception.html">pcl::BadArgumentException</a>, <span class="stringliteral">&quot;[pcl::copyPointCloud] error: &quot;</span> &lt;&lt; faulty &lt;&lt; <span class="stringliteral">&quot; must be positive!&quot;</span>);</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  }</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160; </div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  <span class="keywordflow">if</span> (top == 0 &amp;&amp; left == 0 &amp;&amp; bottom == 0 &amp;&amp; right == 0)</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;   cloud_out = cloud_in;</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  {</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    <span class="comment">// Allocate enough space and copy the basics</span></div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> + left + right;</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> + top + bottom;</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keywordflow">if</span> (cloud_out.size () != cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>)</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;      cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>);</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160; </div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="keywordflow">if</span> (border_type == pcl::BORDER_TRANSPARENT)</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    {</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;      <span class="keyword">const</span> <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* in = &amp;(cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out = &amp;(cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out_inner = out + cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>*top + left;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;      <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>; i++, out_inner += cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, in += cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>)</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      {</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        <span class="keywordflow">if</span> (out_inner != in)</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;          memcpy (out_inner, in, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;      }</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    }</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    {</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;      <span class="comment">// Copy the data</span></div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;      <span class="keywordflow">if</span> (border_type != pcl::BORDER_CONSTANT)</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;      {</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        <span class="keywordflow">try</span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        {</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;          std::vector&lt;int&gt; padding (cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> - cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>);</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;          <span class="keywordtype">int</span> right = cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> - cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> - left;</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;          <span class="keywordtype">int</span> bottom = cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> - cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> - top;</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160; </div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; left; i++)</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;            padding[i] = pcl::interpolatePointIndex (i-left, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, border_type);</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; right; i++)</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;            padding[i+left] = pcl::interpolatePointIndex (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>+i, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, border_type);</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160; </div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;          <span class="keyword">const</span> <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* in = &amp;(cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;          <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out = &amp;(cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;          <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out_inner = out + cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>*top + left;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;          <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>; i++, out_inner += cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, in += cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>)</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;          {</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;            <span class="keywordflow">if</span> (out_inner != in)</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;              memcpy (out_inner, in, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160; </div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; left; j++)</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;              out_inner[j - left] = in[padding[j]];</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; right; j++)</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;              out_inner[j + cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>] = in[padding[j + left]];</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;          }</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; top; i++)</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;          {</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            <span class="keywordtype">int</span> j = pcl::interpolatePointIndex (i - top, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>, border_type);</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;            memcpy (out + i*cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>,</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;                    out + (j+top) * cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>,</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;                    sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>) * cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>);</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;          }</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160; </div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; bottom; i++)</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;          {</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            <span class="keywordtype">int</span> j = pcl::interpolatePointIndex (i + cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>, border_type);</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;            memcpy (out + (i + cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> + top)*cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>,</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;                    out + (j+top)*cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>,</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;                    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;          }</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        }</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <span class="keywordflow">catch</span> (<a class="code" href="classpcl_1_1_bad_argument_exception.html">pcl::BadArgumentException</a> &amp;e)</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        {</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;          PCL_ERROR (<span class="stringliteral">&quot;[pcl::copyPointCloud] Unhandled interpolation type %d!\n&quot;</span>, border_type);</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        }</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      }</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;      {</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        <span class="keywordtype">int</span> right = cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> - cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> - left;</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        <span class="keywordtype">int</span> bottom = cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> - cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> - top;</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        std::vector&lt;PointT&gt; buff (cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, value);</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* buff_ptr = &amp;(buff[0]);</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        <span class="keyword">const</span> <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* in = &amp;(cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out = &amp;(cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0]);</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* out_inner = out + cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>*top + left;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160; </div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>; i++, out_inner += cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, in += cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>)</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        {</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;          <span class="keywordflow">if</span> (out_inner != in)</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;            memcpy (out_inner, in, cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160; </div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;          memcpy (out_inner - left, buff_ptr, left  * <span class="keyword">sizeof</span> (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;          memcpy (out_inner + cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, buff_ptr, right * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;        }</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160; </div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; top; i++)</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        {</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;          memcpy (out + i*cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>, buff_ptr, cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        }</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160; </div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; bottom; i++)</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        {</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;          memcpy (out + (i + cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> + top)*cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>,</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                  buff_ptr,</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> * sizeof (<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>));</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        }</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;      }</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    }</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  }</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_bad_argument_exception_html"><div class="ttname"><a href="classpcl_1_1_bad_argument_exception.html">pcl::BadArgumentException</a></div><div class="ttdoc">An exception that is thrown when the argments number or type is wrong/unhandled.</div><div class="ttdef"><b>Definition:</b> exceptions.h:257</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2d60b6927b31ef89cd3b97e8173ea4aa"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">pcl::PointCloud::resize</a></div><div class="ttdeci">void resize(size_t n)</div><div class="ttdoc">Resize the cloud</div><div class="ttdef"><b>Definition:</b> point_cloud.h:455</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_r_g_b_a_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates, and the RGBA color.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:540</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7e43f6ae7f0607bfdedaea512c510ff8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7e43f6ae7f0607bfdedaea512c510ff8">&#9670;&nbsp;</a></span>CS_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::CS_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the CS norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;{</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keywordflow">if</span> ((a[i] + b[i]) != 0)</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      norm += (a[i] - b[i]) * (a[i] - b[i]) / (a[i] + b[i]);</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      norm += 0;</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga78fe9974ed54012d6cf057afda5d3350"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga78fe9974ed54012d6cf057afda5d3350">&#9670;&nbsp;</a></span>deg2rad() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::deg2rad </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>alpha</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert an angle from degrees to radians </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">alpha</td><td>the input angle (in degrees) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  {</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">return</span> (alpha * 0.017453293);</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga25b0ce695e2a10abb0130bcb5cf90eb6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga25b0ce695e2a10abb0130bcb5cf90eb6">&#9670;&nbsp;</a></span>deg2rad() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::deg2rad </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>alpha</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert an angle from degrees to radians </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">alpha</td><td>the input angle (in degrees) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  {</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">return</span> (alpha * 0.017453293f);</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gae19c71709093628e61037337056b99fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae19c71709093628e61037337056b99fa">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[1/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output XYZ0 dimensions of <em>cloud_in</em> as an Eigen matrix (4 rows, N pts columns) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;{</div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;  <span class="keywordtype">size_t</span> npts = cloud_in.size ();</div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160; </div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;  cloud_out = Eigen::Matrix&lt;Scalar, 4, Eigen::Dynamic&gt;::Zero (4, npts);        <span class="comment">// keep the data aligned</span></div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160; </div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; npts; ++i)</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;  {</div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    cloud_out (0, i) = cloud_in[i].x - centroid[0];</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    cloud_out (1, i) = cloud_in[i].y - centroid[1];</div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    cloud_out (2, i) = cloud_in[i].z - centroid[2];</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    <span class="comment">// One column at a time</span></div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="comment">//cloud_out.block&lt;4, 1&gt; (0, i) = cloud_in.points[i].getVector4fMap () - centroid;</span></div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  }</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160; </div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;  <span class="comment">// Make sure we zero the 4th dimension out (1 row, N columns)</span></div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;  <span class="comment">//cloud_out.block (3, 0, 1, npts).setZero ();</span></div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7953d5001218e840a3a10a2c8649461e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7953d5001218e840a3a10a2c8649461e">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[2/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;{</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  cloud_out = cloud_in;</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160; </div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;  <span class="comment">// Subtract the centroid from cloud_in</span></div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  {</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    cloud_out[i].x -= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (centroid[0]);</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    cloud_out[i].y -= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (centroid[1]);</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    cloud_out[i].z -= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (centroid[2]);</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;  }</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga539a53e4b17ad9ed2f00ae8b2e464221"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga539a53e4b17ad9ed2f00ae8b2e464221">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[3/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output XYZ0 dimensions of <em>cloud_in</em> as an Eigen matrix (4 rows, N pts columns) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;{</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">pcl::demeanPointCloud</a> (cloud_in, indices.indices, centroid, cloud_out));</div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga7f82fbd4e17063ab86287a2543bdea88"><div class="ttname"><a href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">pcl::demeanPointCloud</a></div><div class="ttdeci">void demeanPointCloud(ConstCloudIterator&lt; PointT &gt; &amp;cloud_iterator, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, int npts=0)</div><div class="ttdoc">Subtract a centroid from a point cloud and return the de-meaned representation</div><div class="ttdef"><b>Definition:</b> centroid.hpp:631</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga516ff833c2593ba6e53d369b25989f81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga516ff833c2593ba6e53d369b25989f81">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[4/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;{</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">demeanPointCloud</a> (cloud_in, indices.indices, centroid, cloud_out));</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga79129774e295b6a11559bed8dc5f0b48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga79129774e295b6a11559bed8dc5f0b48">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[5/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output XYZ0 dimensions of <em>cloud_in</em> as an Eigen matrix (4 rows, N pts columns) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;{</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;  <span class="keywordtype">size_t</span> npts = indices.size ();</div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160; </div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;  cloud_out = Eigen::Matrix&lt;Scalar, 4, Eigen::Dynamic&gt;::Zero (4, npts);        <span class="comment">// keep the data aligned</span></div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160; </div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; npts; ++i)</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;  {</div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    cloud_out (0, i) = cloud_in[indices[i]].x - centroid[0];</div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    cloud_out (1, i) = cloud_in[indices[i]].y - centroid[1];</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    cloud_out (2, i) = cloud_in[indices[i]].z - centroid[2];</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="comment">// One column at a time</span></div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    <span class="comment">//cloud_out.block&lt;4, 1&gt; (0, i) = cloud_in.points[indices[i]].getVector4fMap () - centroid;</span></div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;  }</div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160; </div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;  <span class="comment">// Make sure we zero the 4th dimension out (1 row, N columns)</span></div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;  <span class="comment">//cloud_out.block (3, 0, 1, npts).setZero ();</span></div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gab6c182905d630aa151bac567011b93d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab6c182905d630aa151bac567011b93d5">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[6/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;{</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;  <span class="keywordflow">if</span> (indices.size () == cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;  {</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;  }</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;  {</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (indices.size ());</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;  }</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (indices.size ());</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  <span class="comment">// Subtract the centroid from cloud_in</span></div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  {</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    cloud_out[i].x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (cloud_in[indices[i]].x - centroid[0]);</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    cloud_out[i].y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (cloud_in[indices[i]].y - centroid[1]);</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    cloud_out[i].z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (cloud_in[indices[i]].z - centroid[2]);</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;  }</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga553c2ce698f074fe38d74f01b57a3343"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga553c2ce698f074fe38d74f01b57a3343">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[7/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_iterator</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; Scalar, Eigen::Dynamic, Eigen::Dynamic &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>npts</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation as an Eigen matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_iterator</td><td>an iterator over the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output XYZ0 dimensions of <em>cloud_in</em> as an Eigen matrix (4 rows, N pts columns) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">npts</td><td>the number of samples guaranteed to be left in the input cloud, accessible by the iterator. If not given, it will be calculated. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;{</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;  <span class="comment">// Calculate the number of points if not given</span></div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;  <span class="keywordflow">if</span> (npts == 0)</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;  {</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    <span class="keywordflow">while</span> (cloud_iterator.isValid ())</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    {</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;      ++npts;</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;      ++cloud_iterator;</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    }</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    cloud_iterator.reset ();</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  }</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160; </div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;  cloud_out = Eigen::Matrix&lt;Scalar, 4, Eigen::Dynamic&gt;::Zero (4, npts);        <span class="comment">// keep the data aligned</span></div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160; </div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  <span class="keywordflow">while</span> (cloud_iterator.isValid ())</div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;  {</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    cloud_out (0, i) = cloud_iterator-&gt;x - centroid[0];</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    cloud_out (1, i) = cloud_iterator-&gt;y - centroid[1];</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    cloud_out (2, i) = cloud_iterator-&gt;z - centroid[2];</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    ++i;</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    ++cloud_iterator;</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;  }</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7f82fbd4e17063ab86287a2543bdea88"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7f82fbd4e17063ab86287a2543bdea88">&#9670;&nbsp;</a></span>demeanPointCloud() <span class="overload">[8/8]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::demeanPointCloud </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_const_cloud_iterator.html">ConstCloudIterator</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_iterator</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>npts</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtract a centroid from a point cloud and return the de-meaned representation </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_iterator</td><td>an iterator over the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">npts</td><td>the number of samples guaranteed to be left in the input cloud, accessible by the iterator. If not given, it will be calculated. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;{</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  <span class="comment">// Calculate the number of points if not given</span></div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  <span class="keywordflow">if</span> (npts == 0)</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  {</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    <span class="keywordflow">while</span> (cloud_iterator.isValid ())</div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    {</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;      ++npts;</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;      ++cloud_iterator;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    }</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    cloud_iterator.reset ();</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;  }</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160; </div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (npts);</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;  <span class="comment">// Subtract the centroid from cloud_in</span></div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  <span class="keywordflow">while</span> (cloud_iterator.isValid ())</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;  {</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    cloud_out[i].x = cloud_iterator-&gt;x - centroid[0];</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    cloud_out[i].y = cloud_iterator-&gt;y - centroid[1];</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    cloud_out[i].z = cloud_iterator-&gt;z - centroid[2];</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    ++i;</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    ++cloud_iterator;</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  }</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = cloud_out.size ();</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = 1;</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga44d0048ba1efd11359011eb47f6c92fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga44d0048ba1efd11359011eb47f6c92fa">&#9670;&nbsp;</a></span>determinant3x3Matrix()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Matrix::Scalar pcl::determinant3x3Matrix </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>matrix</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate the determinant of a 3x3 matrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">matrix</td><td>matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>determinant of the matrix </dd></dl>
<div class="fragment"><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;{</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  <span class="comment">// result is independent of Row/Col Major storage!</span></div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;  <span class="keywordflow">return</span> matrix.coeff (0) * (matrix.coeff (4) * matrix.coeff (8) - matrix.coeff (5) * matrix.coeff (7)) +</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;         matrix.coeff (1) * (matrix.coeff (5) * matrix.coeff (6) - matrix.coeff (3) * matrix.coeff (8)) +</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;         matrix.coeff (2) * (matrix.coeff (3) * matrix.coeff (7) - matrix.coeff (4) * matrix.coeff (6)) ;</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gae8b5c722d30c22652327a1481528224e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae8b5c722d30c22652327a1481528224e">&#9670;&nbsp;</a></span>Div_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::Div_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the div norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">if</span> ((a[i] / b[i]) &gt; 0)</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      norm += (a[i] - b[i]) * logf (a[i] / b[i]);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      norm += 0;</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4fdd69805d49c416393c604f9f209113"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4fdd69805d49c416393c604f9f209113">&#9670;&nbsp;</a></span>eigen22() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::eigen22 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Matrix &amp;&#160;</td>
          <td class="paramname"><em>eigenvectors</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>eigenvalues</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determine the smallest eigenvalue and its corresponding eigenvector </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>input matrix that needs to be symmetric and positive semi definite </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvectors</td><td>the corresponding eigenvector to the smallest eigenvalue of the input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvalues</td><td>the smallest eigenvalue of the input matrix </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="comment">// if diagonal matrix, the eigenvalues are the diagonal elements</span></div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="comment">// and the eigenvectors are not unique, thus set to Identity</span></div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordflow">if</span> (fabs (mat.coeff (1)) &lt;= std::numeric_limits&lt;typename Matrix::Scalar&gt;::min ())</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  {</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordflow">if</span> (mat.coeff (0) &lt; mat.coeff (3))</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    {</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;      eigenvalues.coeffRef (0) = mat.coeff (0);</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      eigenvalues.coeffRef (1) = mat.coeff (3);</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      eigenvectors.coeffRef (0) = 1.0;</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      eigenvectors.coeffRef (1) = 0.0;</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      eigenvectors.coeffRef (2) = 0.0;</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;      eigenvectors.coeffRef (3) = 1.0;</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    }</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    {</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      eigenvalues.coeffRef (0) = mat.coeff (3);</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      eigenvalues.coeffRef (1) = mat.coeff (0);</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      eigenvectors.coeffRef (0) = 0.0;</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      eigenvectors.coeffRef (1) = 1.0;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      eigenvectors.coeffRef (2) = 1.0;</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      eigenvectors.coeffRef (3) = 0.0;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    }</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  }</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  <span class="comment">// 0.5 to optimize further calculations</span></div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar trace = <span class="keyword">static_cast&lt;</span>typename Matrix::Scalar<span class="keyword">&gt;</span> (0.5) * (mat.coeff (0) + mat.coeff (3));</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar determinant = mat.coeff (0) * mat.coeff (3) - mat.coeff (1) * mat.coeff (1);</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar temp = trace * trace - determinant;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <span class="keywordflow">if</span> (temp &lt; 0)</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    temp = 0;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    temp = ::std::sqrt (temp);</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  eigenvalues.coeffRef (0) = trace - temp;</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  eigenvalues.coeffRef (1) = trace + temp;</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  <span class="comment">// either this is in a row or column depending on RowMajor or ColumnMajor</span></div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  eigenvectors.coeffRef (0) = -mat.coeff (1);</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  eigenvectors.coeffRef (2) = mat.coeff (0) - eigenvalues.coeff (0);</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar norm = <span class="keyword">static_cast&lt;</span>typename Matrix::Scalar<span class="keyword">&gt;</span> (1.0)</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      / <span class="keyword">static_cast&lt;</span>typename Matrix::Scalar<span class="keyword">&gt;</span> (::std::sqrt (eigenvectors.coeffRef (0) * eigenvectors.coeffRef (0) + eigenvectors.coeffRef (2) * eigenvectors.coeffRef (2)));</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  eigenvectors.coeffRef (0) *= norm;</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  eigenvectors.coeffRef (2) *= norm;</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  eigenvectors.coeffRef (1) = eigenvectors.coeffRef (2);</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  eigenvectors.coeffRef (3) = -eigenvectors.coeffRef (0);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga72970b7435480c0c1827c8e74bc1d605"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga72970b7435480c0c1827c8e74bc1d605">&#9670;&nbsp;</a></span>eigen22() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::eigen22 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">typename Matrix::Scalar &amp;&#160;</td>
          <td class="paramname"><em>eigenvalue</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>eigenvector</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determine the smallest eigenvalue and its corresponding eigenvector </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>input matrix that needs to be symmetric and positive semi definite </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvalue</td><td>the smallest eigenvalue of the input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvector</td><td>the corresponding eigenvector to the smallest eigenvalue of the input matrix </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;{</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="comment">// if diagonal matrix, the eigenvalues are the diagonal elements</span></div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="comment">// and the eigenvectors are not unique, thus set to Identity</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">if</span> (fabs (mat.coeff (1)) &lt;= std::numeric_limits&lt;typename Matrix::Scalar&gt;::min ())</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  {</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordflow">if</span> (mat.coeff (0) &lt; mat.coeff (2))</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    {</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      eigenvalue = mat.coeff (0);</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;      eigenvector[0] = 1.0;</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;      eigenvector[1] = 0.0;</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    }</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    {</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      eigenvalue = mat.coeff (2);</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      eigenvector[0] = 0.0;</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      eigenvector[1] = 1.0;</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    }</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  }</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="comment">// 0.5 to optimize further calculations</span></div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar trace = <span class="keyword">static_cast&lt;</span>typename Matrix::Scalar<span class="keyword">&gt;</span> (0.5) * (mat.coeff (0) + mat.coeff (3));</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar determinant = mat.coeff (0) * mat.coeff (3) - mat.coeff (1) * mat.coeff (1);</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keyword">typename</span> Matrix::Scalar temp = trace * trace - determinant;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <span class="keywordflow">if</span> (temp &lt; 0)</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    temp = 0;</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  eigenvalue = trace - ::std::sqrt (temp);</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  eigenvector[0] = -mat.coeff (1);</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  eigenvector[1] = mat.coeff (0) - eigenvalue;</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  eigenvector.normalize ();</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga76d78c3e9c0f3f58a0806499ae6ed97b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga76d78c3e9c0f3f58a0806499ae6ed97b">&#9670;&nbsp;</a></span>eigen33() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::eigen33 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Matrix &amp;&#160;</td>
          <td class="paramname"><em>evecs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>evals</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determines the eigenvalues and corresponding eigenvectors of the symmetric positive semi definite input matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>symmetric positive semi definite input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">evecs</td><td>corresponding eigenvectors in correct order according to eigenvalues </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">evals</td><td>resulting eigenvalues in ascending order </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;{</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="comment">// Scale the matrix so its entries are in [-1,1].  The scaling is applied</span></div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  <span class="comment">// only when at least one matrix entry has magnitude larger than 1.</span></div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  Scalar scale = mat.cwiseAbs ().maxCoeff ();</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  <span class="keywordflow">if</span> (scale &lt;= std::numeric_limits &lt; Scalar &gt; ::min ())</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    scale = Scalar (1.0);</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  Matrix scaledMat = mat / scale;</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  <span class="comment">// Compute the eigenvalues</span></div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  computeRoots (scaledMat, evals);</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  <span class="keywordflow">if</span> ( (evals (2) - evals (0)) &lt;= Eigen::NumTraits &lt; Scalar &gt; ::epsilon ())</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  {</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="comment">// all three equal</span></div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    evecs.setIdentity ();</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  }</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (evals (1) - evals (0)) &lt;= Eigen::NumTraits &lt; Scalar &gt; ::epsilon ())</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  {</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="comment">// first and second equal</span></div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    Matrix tmp;</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    tmp = scaledMat;</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    tmp.diagonal ().array () -= evals (2);</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    Vector vec1 = tmp.row (0).cross (tmp.row (1));</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    Vector vec2 = tmp.row (0).cross (tmp.row (2));</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    Vector vec3 = tmp.row (1).cross (tmp.row (2));</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    Scalar len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    Scalar len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    Scalar len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;      evecs.col (2) = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;      evecs.col (2) = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;      evecs.col (2) = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160; </div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    evecs.col (1) = evecs.col (2).unitOrthogonal ();</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    evecs.col (0) = evecs.col (1).cross (evecs.col (2));</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  }</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (evals (2) - evals (1)) &lt;= Eigen::NumTraits &lt; Scalar &gt; ::epsilon ())</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  {</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="comment">// second and third equal</span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    Matrix tmp;</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    tmp = scaledMat;</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    tmp.diagonal ().array () -= evals (0);</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160; </div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    Vector vec1 = tmp.row (0).cross (tmp.row (1));</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    Vector vec2 = tmp.row (0).cross (tmp.row (2));</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    Vector vec3 = tmp.row (1).cross (tmp.row (2));</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160; </div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    Scalar len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    Scalar len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    Scalar len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160; </div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;      evecs.col (0) = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;      evecs.col (0) = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;      evecs.col (0) = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    evecs.col (1) = evecs.col (0).unitOrthogonal ();</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    evecs.col (2) = evecs.col (0).cross (evecs.col (1));</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  }</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  {</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    Matrix tmp;</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    tmp = scaledMat;</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    tmp.diagonal ().array () -= evals (2);</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    Vector vec1 = tmp.row (0).cross (tmp.row (1));</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    Vector vec2 = tmp.row (0).cross (tmp.row (2));</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    Vector vec3 = tmp.row (1).cross (tmp.row (2));</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160; </div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    Scalar len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    Scalar len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    Scalar len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    Scalar *mmax = <span class="keyword">new</span> Scalar[3];</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    Scalar mmax[3];</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> min_el = 2;</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max_el = 2;</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    {</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;      mmax[2] = len1;</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;      evecs.col (2) = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    }</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    {</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;      mmax[2] = len2;</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;      evecs.col (2) = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    }</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    {</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;      mmax[2] = len3;</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;      evecs.col (2) = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    }</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160; </div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    tmp = scaledMat;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    tmp.diagonal ().array () -= evals (1);</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    vec1 = tmp.row (0).cross (tmp.row (1));</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    vec2 = tmp.row (0).cross (tmp.row (2));</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    vec3 = tmp.row (1).cross (tmp.row (2));</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160; </div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    {</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;      mmax[1] = len1;</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;      evecs.col (1) = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;      min_el = len1 &lt;= mmax[min_el] ? 1 : min_el;</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;      max_el = len1 &gt; mmax[max_el] ? 1 : max_el;</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    }</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    {</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;      mmax[1] = len2;</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;      evecs.col (1) = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;      min_el = len2 &lt;= mmax[min_el] ? 1 : min_el;</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;      max_el = len2 &gt; mmax[max_el] ? 1 : max_el;</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    }</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    {</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;      mmax[1] = len3;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;      evecs.col (1) = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;      min_el = len3 &lt;= mmax[min_el] ? 1 : min_el;</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;      max_el = len3 &gt; mmax[max_el] ? 1 : max_el;</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    }</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160; </div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    tmp = scaledMat;</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    tmp.diagonal ().array () -= evals (0);</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160; </div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    vec1 = tmp.row (0).cross (tmp.row (1));</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    vec2 = tmp.row (0).cross (tmp.row (2));</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    vec3 = tmp.row (1).cross (tmp.row (2));</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160; </div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    {</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;      mmax[0] = len1;</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      evecs.col (0) = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;      min_el = len3 &lt;= mmax[min_el] ? 0 : min_el;</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;      max_el = len3 &gt; mmax[max_el] ? 0 : max_el;</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    }</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    {</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;      mmax[0] = len2;</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;      evecs.col (0) = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;      min_el = len3 &lt;= mmax[min_el] ? 0 : min_el;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      max_el = len3 &gt; mmax[max_el] ? 0 : max_el;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    }</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    {</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;      mmax[0] = len3;</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      evecs.col (0) = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      min_el = len3 &lt;= mmax[min_el] ? 0 : min_el;</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      max_el = len3 &gt; mmax[max_el] ? 0 : max_el;</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    }</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160; </div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    <span class="keywordtype">unsigned</span> mid_el = 3 - min_el - max_el;</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    evecs.col (min_el) = evecs.col ( (min_el + 1) % 3).cross (evecs.col ( (min_el + 2) % 3)).normalized ();</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    evecs.col (mid_el) = evecs.col ( (mid_el + 1) % 3).cross (evecs.col ( (mid_el + 2) % 3)).normalized ();</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keyword">delete</span> [] mmax;</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  }</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  <span class="comment">// Rescale back to the original size.</span></div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  evals *= scale;</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaca873868052e7d26efcf4b684a17bef2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaca873868052e7d26efcf4b684a17bef2">&#9670;&nbsp;</a></span>eigen33() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::eigen33 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">typename Matrix::Scalar &amp;&#160;</td>
          <td class="paramname"><em>eigenvalue</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>eigenvector</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determines the eigenvector and eigenvalue of the smallest eigenvalue of the symmetric positive semi definite input matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>symmetric positive semi definite input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvalue</td><td>smallest eigenvalue of the input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">eigenvector</td><td>the corresponding eigenvector for the input eigenvalue </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>if the smallest eigenvalue is not unique, this function may return any eigenvector that is consistent to the eigenvalue. </dd></dl>
<div class="fragment"><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;{</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="comment">// Scale the matrix so its entries are in [-1,1].  The scaling is applied</span></div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  <span class="comment">// only when at least one matrix entry has magnitude larger than 1.</span></div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  Scalar scale = mat.cwiseAbs ().maxCoeff ();</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="keywordflow">if</span> (scale &lt;= std::numeric_limits &lt; Scalar &gt; ::min ())</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    scale = Scalar (1.0);</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160; </div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  Matrix scaledMat = mat / scale;</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  Vector eigenvalues;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  computeRoots (scaledMat, eigenvalues);</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;  eigenvalue = eigenvalues (0) * scale;</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  scaledMat.diagonal ().array () -= eigenvalues (0);</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  Vector vec1 = scaledMat.row (0).cross (scaledMat.row (1));</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  Vector vec2 = scaledMat.row (0).cross (scaledMat.row (2));</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  Vector vec3 = scaledMat.row (1).cross (scaledMat.row (2));</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  Scalar len1 = vec1.squaredNorm ();</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  Scalar len2 = vec2.squaredNorm ();</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  Scalar len3 = vec3.squaredNorm ();</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  <span class="keywordflow">if</span> (len1 &gt;= len2 &amp;&amp; len1 &gt;= len3)</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    eigenvector = vec1 / std::sqrt (len1);</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len2 &gt;= len1 &amp;&amp; len2 &gt;= len3)</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    eigenvector = vec2 / std::sqrt (len2);</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    eigenvector = vec3 / std::sqrt (len3);</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3a1ba2729012164635113224cb211581"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3a1ba2729012164635113224cb211581">&#9670;&nbsp;</a></span>eigen33() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix , typename Vector &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::eigen33 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>mat</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Vector &amp;&#160;</td>
          <td class="paramname"><em>evals</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>determines the eigenvalues of the symmetric positive semi definite input matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>symmetric positive semi definite input matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">evals</td><td>resulting eigenvalues in ascending order </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;{</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  Scalar scale = mat.cwiseAbs ().maxCoeff ();</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordflow">if</span> (scale &lt;= std::numeric_limits &lt; Scalar &gt; ::min ())</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    scale = Scalar (1.0);</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  Matrix scaledMat = mat / scale;</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  computeRoots (scaledMat, evals);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  evals *= scale;</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga8c74d7c459961a2650c22eff8126aef8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8c74d7c459961a2650c22eff8126aef8">&#9670;&nbsp;</a></span>getAngle3D() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::getAngle3D </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>v1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>v2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>in_degree</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the smallest angle between two 3D vectors in radians (default) or degree. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">v1</td><td>the first 3D vector (represented as a <em>Eigen::Vector3f</em>) </td></tr>
    <tr><td class="paramname">v2</td><td>the second 3D vector (represented as a <em>Eigen::Vector3f</em>) </td></tr>
    <tr><td class="paramname">in_degree</td><td>determine if angle should be in radians or degrees </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the angle between v1 and v2 in radians or degrees </dd></dl>
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="comment">// Compute the actual angle</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="keywordtype">double</span> rad = v1.normalized ().dot (v2.normalized ());</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">if</span> (rad &lt; -1.0)</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    rad = -1.0;</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rad &gt;  1.0)</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    rad = 1.0;</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">return</span> (in_degree ? acos (rad) * 180.0 / M_PI : acos (rad));</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga54999c02ba9bee56404539747b0fda51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga54999c02ba9bee56404539747b0fda51">&#9670;&nbsp;</a></span>getAngle3D() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::getAngle3D </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>v1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>v2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>in_degree</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the smallest angle between two 3D vectors in radians (default) or degree. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">v1</td><td>the first 3D vector (represented as a <em>Eigen::Vector4f</em>) </td></tr>
    <tr><td class="paramname">v2</td><td>the second 3D vector (represented as a <em>Eigen::Vector4f</em>) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the angle between v1 and v2 in radians or degrees </dd></dl>
<dl class="section note"><dt>注解</dt><dd>Handles rounding error for parallel and anti-parallel vectors </dd></dl>
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <span class="comment">// Compute the actual angle</span></div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  <span class="keywordtype">double</span> rad = v1.normalized ().dot (v2.normalized ());</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keywordflow">if</span> (rad &lt; -1.0)</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    rad = -1.0;</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rad &gt;  1.0)</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    rad = 1.0;</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keywordflow">return</span> (in_degree ? acos (rad) * 180.0 / M_PI : acos (rad));</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gab64d6ba9e834d29feda71a76d3ec841f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab64d6ba9e834d29feda71a76d3ec841f">&#9670;&nbsp;</a></span>getCircumcircleRadius()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::getCircumcircleRadius </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pa</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pc</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the radius of a circumscribed circle for a triangle formed of three points pa, pb, and pc </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">pa</td><td>the first point </td></tr>
    <tr><td class="paramname">pb</td><td>the second point </td></tr>
    <tr><td class="paramname">pc</td><td>the third point </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the radius of the circumscribed circle </dd></dl>
<div class="fragment"><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;{</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  Eigen::Vector4f p1 (pa.x, pa.y, pa.z, 0);</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  Eigen::Vector4f p2 (pb.x, pb.y, pb.z, 0);</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;  Eigen::Vector4f p3 (pc.x, pc.y, pc.z, 0);</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160; </div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;  <span class="keywordtype">double</span> p2p1 = (p2 - p1).norm (), p3p2 = (p3 - p2).norm (), p1p3 = (p1 - p3).norm ();</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  <span class="comment">// Calculate the area of the triangle using Heron&#39;s formula </span></div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  <span class="comment">// (http://en.wikipedia.org/wiki/Heron&#39;s_formula)</span></div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  <span class="keywordtype">double</span> semiperimeter = (p2p1 + p3p2 + p1p3) / 2.0;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  <span class="keywordtype">double</span> area = sqrt (semiperimeter * (semiperimeter - p2p1) * (semiperimeter - p3p2) * (semiperimeter - p1p3));</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  <span class="comment">// Compute the radius of the circumscribed circle</span></div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  <span class="keywordflow">return</span> ((p2p1 * p3p2 * p1p3) / (4.0 * area));</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7a91d95901fcbac4a753a4212cfbf221"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7a91d95901fcbac4a753a4212cfbf221">&#9670;&nbsp;</a></span>getEigenAsPointCloud()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS bool pcl::getEigenAsPointCloud </td>
          <td>(</td>
          <td class="paramtype">Eigen::MatrixXf &amp;&#160;</td>
          <td class="paramname"><em>in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the XYZ dimensions from an Eigen MatrixXf into a <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> message </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">in</td><td>the Eigen MatrixXf format containing XYZ0 / point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>the resultant point cloud message </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>the method assumes that the <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">PCLPointCloud2</a> message already has the fields set up properly ! </dd></dl>

</div>
</div>
<a id="ga637da495fec59c1c1d186aa6e3bac15b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga637da495fec59c1c1d186aa6e3bac15b">&#9670;&nbsp;</a></span>getEulerAngles()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getEulerAngles </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>roll</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>pitch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>yaw</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Extract the Euler angles (XYZ-convention) from the given transformation </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>the input transformation matrix </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">roll</td><td>the resulting roll angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pitch</td><td>the resulting pitch angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">yaw</td><td>the resulting yaw angle </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;{</div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  roll = atan2 (t (2, 1), t (2, 2));</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  pitch = asin (-t (2, 0));</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  yaw = atan2 (t (1, 0), t (0, 0));</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga2bc4b9a4e25de1d0b00db4e41f0ad682"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2bc4b9a4e25de1d0b00db4e41f0ad682">&#9670;&nbsp;</a></span>getFieldIndex() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int pcl::getFieldIndex </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>field_name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the index of a specified field (i.e., dimension/channel) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the the point cloud message </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">field_name</td><td>the string defining the field name </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  {</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="comment">// Get the index we need</span></div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> d = 0; d &lt; cloud.fields.size (); ++d)</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;      <span class="keywordflow">if</span> (cloud.fields[d].name == field_name)</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(d));</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaad9e56869486f44e2caa30a584c1b734"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaad9e56869486f44e2caa30a584c1b734">&#9670;&nbsp;</a></span>getFieldIndex() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int pcl::getFieldIndex </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>field_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>fields</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the index of a specified field (i.e., dimension/channel) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the the point cloud message </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">field_name</td><td>the string defining the field name </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fields</td><td>a vector to the original <em><a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a></em> vector that the raw <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message contains </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  fields.clear ();</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <span class="comment">// Get the fields list</span></div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  pcl::for_each_type&lt;typename pcl::traits::fieldList&lt;PointT&gt;::type&gt;(<a class="code" href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder&lt;PointT&gt;</a>(fields));</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> d = 0; d &lt; fields.size (); ++d)</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">if</span> (fields[d].name == field_name)</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;      <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(d));</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;}</div>
<div class="ttc" id="astructpcl_1_1detail_1_1_field_adder_html"><div class="ttname"><a href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder</a></div><div class="ttdef"><b>Definition:</b> conversions.h:66</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga21f637d9f7422a769448983af5fcbdeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga21f637d9f7422a769448983af5fcbdeb">&#9670;&nbsp;</a></span>getFieldIndex() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int pcl::getFieldIndex </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>field_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>fields</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the index of a specified field (i.e., dimension/channel) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">field_name</td><td>the string defining the field name </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fields</td><td>a vector to the original <em><a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a></em> vector that the raw <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message contains </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  fields.clear ();</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="comment">// Get the fields list</span></div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  pcl::for_each_type&lt;typename pcl::traits::fieldList&lt;PointT&gt;::type&gt;(<a class="code" href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder&lt;PointT&gt;</a>(fields));</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> d = 0; d &lt; fields.size (); ++d)</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">if</span> (fields[d].name == field_name)</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(d));</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaa2ff830572b7cbf2fd8ce335fd9ca4fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa2ff830572b7cbf2fd8ce335fd9ca4fb">&#9670;&nbsp;</a></span>getFields() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getFields </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>fields</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the list of available fields (i.e., dimension/channel) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the point cloud message </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fields</td><td>a vector to the original <em><a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a></em> vector that the raw <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message contains </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;{</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  fields.clear ();</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="comment">// Get the fields list</span></div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  pcl::for_each_type&lt;typename pcl::traits::fieldList&lt;PointT&gt;::type&gt;(<a class="code" href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder&lt;PointT&gt;</a>(fields));</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gae88a16c0d6d70da8978ead0bb4e8e766"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae88a16c0d6d70da8978ead0bb4e8e766">&#9670;&nbsp;</a></span>getFields() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getFields </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_p_c_l_point_field.html">pcl::PCLPointField</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>fields</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the list of available fields (i.e., dimension/channel) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">fields</td><td>a vector to the original <em><a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a></em> vector that the raw <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message contains </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;{</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  fields.clear ();</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="comment">// Get the fields list</span></div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  pcl::for_each_type&lt;typename pcl::traits::fieldList&lt;PointT&gt;::type&gt;(<a class="code" href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder&lt;PointT&gt;</a>(fields));</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga83ff4ee40cd3c49c7500905f59f37536"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga83ff4ee40cd3c49c7500905f59f37536">&#9670;&nbsp;</a></span>getFieldSize()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int pcl::getFieldSize </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>datatype</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtains the size of a specific field data type in bytes </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">datatype</td><td>the field data type (see <a class="el" href="_p_c_l_point_field_8h_source.html">PCLPointField.h</a>) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  {</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">switch</span> (datatype)</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    {</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT8:</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT8:</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordflow">return</span> (1);</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT16:</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT16:</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordflow">return</span> (2);</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT32:</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT32:</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::FLOAT32:</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">return</span> (4);</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::FLOAT64:</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">return</span> (8);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;      <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    }</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga769f320a73865c3fe30cb96c0f932e76"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga769f320a73865c3fe30cb96c0f932e76">&#9670;&nbsp;</a></span>getFieldsList() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::string pcl::getFieldsList </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the available point cloud fields as a space separated string </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>a pointer to the <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> message </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    std::string result;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.fields.size () - 1; ++i)</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      result += cloud.fields[i].name + <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    result += cloud.fields[cloud.fields.size () - 1].name;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">return</span> (result);</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaabed3f370d11ba5dc154d79e682d35b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaabed3f370d11ba5dc154d79e682d35b4">&#9670;&nbsp;</a></span>getFieldsList() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::string pcl::getFieldsList </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the list of all fields available in a given cloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the the point cloud message </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;{</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="comment">// Get the fields list</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  std::vector&lt;pcl::PCLPointField&gt; fields;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  pcl::for_each_type&lt;typename pcl::traits::fieldList&lt;PointT&gt;::type&gt;(<a class="code" href="structpcl_1_1detail_1_1_field_adder.html">pcl::detail::FieldAdder&lt;PointT&gt;</a>(fields));</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  std::string result;</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; fields.size () - 1; ++i)</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    result += fields[i].name + <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  result += fields[fields.size () - 1].name;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keywordflow">return</span> (result);</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac282d255323a916e942f85b7f16740e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac282d255323a916e942f85b7f16740e3">&#9670;&nbsp;</a></span>getFieldType() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int pcl::getFieldType </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtains the type of the <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> from a specific size and type </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>the size in bytes of the data field </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>a char describing the type of the field ('F' = float, 'I' = signed, 'U' = unsigned) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  {</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    type = std::toupper (type, std::locale::classic ());</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">switch</span> (size)</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    {</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;      <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;I&#39;</span>)</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::INT8);</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;U&#39;</span>)</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::UINT8);</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160; </div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;      <span class="keywordflow">case</span> 2:</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;I&#39;</span>)</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::INT16);</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;U&#39;</span>)</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::UINT16);</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      <span class="keywordflow">case</span> 4:</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;I&#39;</span>)</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::INT32);</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;U&#39;</span>)</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::UINT32);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="keywordflow">if</span> (type == <span class="charliteral">&#39;F&#39;</span>)</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;          <span class="keywordflow">return</span> (pcl::PCLPointField::FLOAT32);</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;      <span class="keywordflow">case</span> 8:</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        <span class="keywordflow">return</span> (pcl::PCLPointField::FLOAT64);</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="keywordflow">return</span> (-1);</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    }</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac4a4eaf1f19dd043252a0b93ac975a10"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac4a4eaf1f19dd043252a0b93ac975a10">&#9670;&nbsp;</a></span>getFieldType() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">char pcl::getFieldType </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>type</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtains the type of the <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> from a specific <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> as a char </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>the <a class="el" href="structpcl_1_1_p_c_l_point_field.html">PCLPointField</a> field type </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  {</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    {</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT8:</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT16:</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::INT32:</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        <span class="keywordflow">return</span> (<span class="charliteral">&#39;I&#39;</span>);</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT8:</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT16:</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::UINT32:</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        <span class="keywordflow">return</span> (<span class="charliteral">&#39;U&#39;</span>);</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::FLOAT32:</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      <span class="keywordflow">case</span> pcl::PCLPointField::FLOAT64:</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        <span class="keywordflow">return</span> (<span class="charliteral">&#39;F&#39;</span>);</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        <span class="keywordflow">return</span> (<span class="charliteral">&#39;?&#39;</span>);</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    }</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga1583a71aef0f54550adef0ebfef89edd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1583a71aef0f54550adef0ebfef89edd">&#9670;&nbsp;</a></span>getMaxDistance() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMaxDistance </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pivot_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the point at maximum distance from a given point and a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">pivot_pt</td><td>the point from where to compute the distance </td></tr>
    <tr><td class="paramname">max_pt</td><td>the point in cloud that is the farthest point away from pivot_pt </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;{</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keywordtype">float</span> max_dist = -FLT_MAX;</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordtype">int</span> max_idx = -1;</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordtype">float</span> dist;</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keyword">const</span> Eigen::Vector3f pivot_pt3 = pivot_pt.head&lt;3&gt; ();</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  {</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    {</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      pcl::Vector3fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getVector3fMap ();</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;      dist = (pivot_pt3 - pt).norm ();</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      <span class="keywordflow">if</span> (dist &gt; max_dist)</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      {</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        max_idx = int (i);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;      }</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    }</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  }</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  {</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    {</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x) || !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y) || !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z))</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      pcl::Vector3fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getVector3fMap ();</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      dist = (pivot_pt3 - pt).norm ();</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      <span class="keywordflow">if</span> (dist &gt; max_dist)</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      {</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        max_idx = int (i);</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;      }</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    }</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  }</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordflow">if</span>(max_idx != -1)</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    max_pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[max_idx].getVector4fMap ();</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    max_pt = Eigen::Vector4f(std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN());</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gab5669ac9649b383c053ef67cc06e6b55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab5669ac9649b383c053ef67cc06e6b55">&#9670;&nbsp;</a></span>getMaxDistance() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMaxDistance </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pivot_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the point at maximum distance from a given point and a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">pivot_pt</td><td>the point from where to compute the distance </td></tr>
    <tr><td class="paramname">indices</td><td>the vector of point indices to use from <em>cloud</em> </td></tr>
    <tr><td class="paramname">max_pt</td><td>the point in cloud that is the farthest point away from pivot_pt </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;{</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  <span class="keywordtype">float</span> max_dist = -FLT_MAX;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  <span class="keywordtype">int</span> max_idx = -1;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="keywordtype">float</span> dist;</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  <span class="keyword">const</span> Eigen::Vector3f pivot_pt3 = pivot_pt.head&lt;3&gt; ();</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  {</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    {</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      pcl::Vector3fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].getVector3fMap ();</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      dist = (pivot_pt3 - pt).norm ();</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;      <span class="keywordflow">if</span> (dist &gt; max_dist)</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;      {</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        max_idx = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (i);</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      }</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    }</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  }</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  {</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    {</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].x) || !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].y)</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;          ||</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].z))</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      pcl::Vector3fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].getVector3fMap ();</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;      dist = (pivot_pt3 - pt).norm ();</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;      <span class="keywordflow">if</span> (dist &gt; max_dist)</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;      {</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        max_idx = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (i);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;      }</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  }</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <span class="keywordflow">if</span>(max_idx != -1)</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    max_pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[max_idx]].getVector4fMap ();</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    max_pt = Eigen::Vector4f(std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN(),std::numeric_limits&lt;float&gt;::quiet_NaN());</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga1794862c1f52bfb188d6a4b48a2a5f4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1794862c1f52bfb188d6a4b48a2a5f4b">&#9670;&nbsp;</a></span>getMaxSegment() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::getMaxSegment </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pmin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pmax</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtain the maximum segment in a given set of points, and return the minimum and maximum points. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>a set of point indices to use from <em>cloud</em> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pmin</td><td>the coordinates of the "minimum" point in <em>cloud</em> (one end of the segment) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pmax</td><td>the coordinates of the "maximum" point in <em>cloud</em> (the other end of the segment) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the length of segment length </dd></dl>
<div class="fragment"><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  {</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordtype">double</span> max_dist = std::numeric_limits&lt;double&gt;::min ();</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keywordtype">int</span> i_min = -1, i_max = -1;</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    {</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i; j &lt; indices.size (); ++j)</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;      {</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="comment">// Compute the distance </span></div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <span class="keywordtype">double</span> dist = (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].getVector4fMap () - </div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                       cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[j]].getVector4fMap ()).squaredNorm ();</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordflow">if</span> (dist &lt;= max_dist)</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        i_min = i;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        i_max = j;</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="keywordflow">if</span> (i_min == -1 || i_max == -1)</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <span class="keywordflow">return</span> (max_dist = std::numeric_limits&lt;double&gt;::min ());</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    pmin = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i_min]];</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    pmax = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i_max]];</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">return</span> (std::sqrt (max_dist));</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga30ceb9b4896578ed075a36ad3937ee26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga30ceb9b4896578ed075a36ad3937ee26">&#9670;&nbsp;</a></span>getMaxSegment() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::getMaxSegment </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pmin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>pmax</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtain the maximum segment in a given set of points, and return the minimum and maximum points. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the point cloud dataset </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pmin</td><td>the coordinates of the "minimum" point in <em>cloud</em> (one end of the segment) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pmax</td><td>the coordinates of the "maximum" point in <em>cloud</em> (the other end of the segment) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the length of segment length </dd></dl>
<div class="fragment"><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  {</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordtype">double</span> max_dist = std::numeric_limits&lt;double&gt;::min ();</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keywordtype">int</span> i_min = -1, i_max = -1;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    {</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i; j &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++j)</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;      {</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="comment">// Compute the distance </span></div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordtype">double</span> dist = (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getVector4fMap () - </div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                       cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j].getVector4fMap ()).squaredNorm ();</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">if</span> (dist &lt;= max_dist)</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        max_dist = dist;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        i_min = i;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        i_max = j;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      }</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    }</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordflow">if</span> (i_min == -1 || i_max == -1)</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      <span class="keywordflow">return</span> (max_dist = std::numeric_limits&lt;double&gt;::min ());</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    pmin = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_min];</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    pmax = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_max];</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">return</span> (std::sqrt (max_dist));</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3349ce9c26d4acbb1adae1e9b2d5f7e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3349ce9c26d4acbb1adae1e9b2d5f7e5">&#9670;&nbsp;</a></span>getMeanStd()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMeanStd </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
          <td class="paramname"><em>values</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>mean</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>stddev</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute both the mean and the standard deviation of an array of values </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">values</td><td>the array of values </td></tr>
    <tr><td class="paramname">mean</td><td>the resultant mean of the distribution </td></tr>
    <tr><td class="paramname">stddev</td><td>the resultant standard deviation of the distribution </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;{</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  <span class="keywordtype">double</span> sum = 0, sq_sum = 0;</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; values.size (); ++i)</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  {</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    sum += values[i];</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    sq_sum += values[i] * values[i];</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  }</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  mean = sum / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(values.size ());</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  <span class="keywordtype">double</span> variance = (sq_sum - sum * sum / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(values.size ())) / (<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(values.size ()) - 1);</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  stddev = sqrt (variance);</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gacb684087702126b29c8b99f1e2c2786b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacb684087702126b29c8b99f1e2c2786b">&#9670;&nbsp;</a></span>getMeanStdDev()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::getMeanStdDev </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
          <td class="paramname"><em>values</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>mean</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>stddev</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute both the mean and the standard deviation of an array of values </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">values</td><td>the array of values </td></tr>
    <tr><td class="paramname">mean</td><td>the resultant mean of the distribution </td></tr>
    <tr><td class="paramname">stddev</td><td>the resultant standard deviation of the distribution </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga287e6ce2d4be348c059baf31eaf2dd54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga287e6ce2d4be348c059baf31eaf2dd54">&#9670;&nbsp;</a></span>getMinMax() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::getMinMax </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>idx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>field_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>min_p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>max_p</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on a point histogram </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the cloud containing multi-dimensional histograms </td></tr>
    <tr><td class="paramname">idx</td><td>point index representing the histogram that we need to compute min/max for </td></tr>
    <tr><td class="paramname">field_name</td><td>the field name containing the multi-dimensional histogram </td></tr>
    <tr><td class="paramname">min_p</td><td>the resultant minimum </td></tr>
    <tr><td class="paramname">max_p</td><td>the resultant maximum </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="gaacff2e632283be60810678d329b166ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaacff2e632283be60810678d329b166ec">&#9670;&nbsp;</a></span>getMinMax() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMinMax </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>histogram</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>min_p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>max_p</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on a point histogram </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">histogram</td><td>the point representing a multi-dimensional histogram </td></tr>
    <tr><td class="paramname">len</td><td>the length of the histogram </td></tr>
    <tr><td class="paramname">min_p</td><td>the resultant minimum </td></tr>
    <tr><td class="paramname">max_p</td><td>the resultant maximum </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;{</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;  min_p = FLT_MAX;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;  max_p = -FLT_MAX;</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; len; ++i)</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;  {</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    min_p = (histogram[i] &gt; min_p) ? min_p : histogram[i]; </div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    max_p = (histogram[i] &lt; max_p) ? max_p : histogram[i]; </div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;  }</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga41eb246206d51f77a8cb82b5d963e6a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga41eb246206d51f77a8cb82b5d963e6a2">&#9670;&nbsp;</a></span>getMinMax3D() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMinMax3D </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>min_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">indices</td><td>the vector of point indices to use from <em>cloud</em> </td></tr>
    <tr><td class="paramname">min_pt</td><td>the resultant minimum bounds </td></tr>
    <tr><td class="paramname">max_pt</td><td>the resultant maximum bounds </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;{</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  Eigen::Array4f min_p, max_p;</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  min_p.setConstant (FLT_MAX);</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  max_p.setConstant (-FLT_MAX);</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160; </div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  {</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.indices.size (); ++i)</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    {</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]].getArray4fMap ();</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    }</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  }</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  {</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.indices.size (); ++i)</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    {</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]].x) || </div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]].y) || </div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]].z))</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices.indices[i]].getArray4fMap ();</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    }</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  }</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  min_pt = min_p;</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  max_pt = max_p;</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga47dac23a8a283dd07f62fa7aa21b63ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga47dac23a8a283dd07f62fa7aa21b63ec">&#9670;&nbsp;</a></span>getMinMax3D() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMinMax3D </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>min_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">indices</td><td>the vector of point indices to use from <em>cloud</em> </td></tr>
    <tr><td class="paramname">min_pt</td><td>the resultant minimum bounds </td></tr>
    <tr><td class="paramname">max_pt</td><td>the resultant maximum bounds </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;{</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  min_pt.setConstant (FLT_MAX);</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  max_pt.setConstant (-FLT_MAX);</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160; </div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  {</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    {</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].getArray4fMap ();</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;      min_pt = min_pt.array ().min (pt);</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;      max_pt = max_pt.array ().max (pt);</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    }</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  }</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  {</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices.size (); ++i)</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    {</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].x) || </div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].y) || </div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].z))</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].getArray4fMap ();</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;      min_pt = min_pt.array ().min (pt);</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;      max_pt = max_pt.array ().max (pt);</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    }</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  }</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gafd9010977f5e52b35b484be7624df3f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafd9010977f5e52b35b484be7624df3f8">&#9670;&nbsp;</a></span>getMinMax3D() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMinMax3D </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>min_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">min_pt</td><td>the resultant minimum bounds </td></tr>
    <tr><td class="paramname">max_pt</td><td>the resultant maximum bounds </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;{</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  Eigen::Array4f min_p, max_p;</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  min_p.setConstant (FLT_MAX);</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  max_p.setConstant (-FLT_MAX);</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  {</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    {</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getArray4fMap ();</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    }</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  }</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  {</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    {</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x) || </div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y) || </div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z))</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getArray4fMap ();</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    }</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  }</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  min_pt = min_p;</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  max_pt = max_p;</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3166f09aafd659f69dc75e63f5e10f81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3166f09aafd659f69dc75e63f5e10f81">&#9670;&nbsp;</a></span>getMinMax3D() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getMinMax3D </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>min_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum and maximum values on each of the 3 (x-y-z) dimensions in a given pointcloud </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">min_pt</td><td>the resultant minimum bounds </td></tr>
    <tr><td class="paramname">max_pt</td><td>the resultant maximum bounds </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;{</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  Eigen::Array4f min_p, max_p;</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  min_p.setConstant (FLT_MAX);</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;  max_p.setConstant (-FLT_MAX);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160; </div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  {</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    {</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getArray4fMap ();</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  }</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  {</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    {</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x) || </div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y) || </div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z))</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      pcl::Array4fMapConst pt = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].getArray4fMap ();</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      min_p = min_p.min (pt);</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      max_p = max_p.max (pt);</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    }</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  }</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  min_pt.x = min_p[0]; min_pt.y = min_p[1]; min_pt.z = min_p[2];</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  max_pt.x = max_p[0]; max_pt.y = max_p[1]; max_pt.z = max_p[2];</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga6d121a64a02046c1c38485ea1fad953e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6d121a64a02046c1c38485ea1fad953e">&#9670;&nbsp;</a></span>getPointCloudAsEigen()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS bool pcl::getPointCloudAsEigen </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> &amp;&#160;</td>
          <td class="paramname"><em>in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::MatrixXf &amp;&#160;</td>
          <td class="paramname"><em>out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the XYZ dimensions of a <a class="el" href="structpcl_1_1_p_c_l_point_cloud2.html">pcl::PCLPointCloud2</a> into Eigen format </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">in</td><td>the point cloud message </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>the resultant Eigen MatrixXf format containing XYZ0 / point </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="gab831a44b375fa7e6bada740d1d17e247"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab831a44b375fa7e6bada740d1d17e247">&#9670;&nbsp;</a></span>getPointsInBox()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getPointsInBox </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>min_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>max_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get a set of points residing in a box given its bounds </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cloud</td><td>the point cloud data message </td></tr>
    <tr><td class="paramname">min_pt</td><td>the minimum bounds </td></tr>
    <tr><td class="paramname">max_pt</td><td>the maximum bounds </td></tr>
    <tr><td class="paramname">indices</td><td>the resultant set of point indices residing in the box </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;{</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  indices.resize (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <span class="keywordtype">int</span> l = 0;</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <span class="comment">// If the data is dense, we don&#39;t need to check for NaN</span></div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  {</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    {</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;      <span class="comment">// Check if the point is inside bounds</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;      <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x &lt; min_pt[0] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y &lt; min_pt[1] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z &lt; min_pt[2])</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x &gt; max_pt[0] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y &gt; max_pt[1] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z &gt; max_pt[2])</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      indices[l++] = int (i);</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    }</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  }</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="comment">// NaN or Inf values could exist =&gt; check for them</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  {</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    {</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;      <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x) || </div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y) || </div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;          !pcl_isfinite (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z))</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      <span class="comment">// Check if the point is inside bounds</span></div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x &lt; min_pt[0] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y &lt; min_pt[1] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z &lt; min_pt[2])</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x &gt; max_pt[0] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y &gt; max_pt[1] || cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z &gt; max_pt[2])</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      indices[l++] = int (i);</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  }</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  indices.resize (l);</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf49a34180e337479ddeda21222882124"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf49a34180e337479ddeda21222882124">&#9670;&nbsp;</a></span>getTransformation() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Affine3f pcl::getTransformation </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>z</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>roll</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>pitch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>yaw</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create a transformation from the given translation and Euler angles (XYZ-convention) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>the input x translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the input y translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the input z translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">roll</td><td>the input roll angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pitch</td><td>the input pitch angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">yaw</td><td>the input yaw angle </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the resulting transformation matrix </dd></dl>
<div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  {</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    Eigen::Affine3f t;</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    getTransformation&lt;float&gt; (x, y, z, roll, pitch, yaw, t);</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="keywordflow">return</span> (t);</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga5cc746d1fd72f99fee462ed1a9e4abea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5cc746d1fd72f99fee462ed1a9e4abea">&#9670;&nbsp;</a></span>getTransformation() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTransformation </td>
          <td>(</td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>z</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>roll</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>pitch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar&#160;</td>
          <td class="paramname"><em>yaw</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>t</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Create a transformation from the given translation and Euler angles (XYZ-convention) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>the input x translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the input y translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the input z translation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">roll</td><td>the input roll angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pitch</td><td>the input pitch angle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">yaw</td><td>the input yaw angle </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">t</td><td>the resulting transformation matrix </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;{</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;  Scalar A = cos (yaw),  B = sin (yaw),  C  = cos (pitch), D  = sin (pitch),</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;         E = cos (roll), F = sin (roll), DE = D*E,         DF = D*F;</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160; </div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;  t (0, 0) = A*C;  t (0, 1) = A*DF - B*E;  t (0, 2) = B*F + A*DE;  t (0, 3) = x;</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;  t (1, 0) = B*C;  t (1, 1) = A*E + B*DF;  t (1, 2) = B*DE - A*F;  t (1, 3) = y;</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;  t (2, 0) = -D;   t (2, 1) = C*F;         t (2, 2) = C*E;         t (2, 3) = z;</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;  t (3, 0) = 0;    t (3, 1) = 0;           t (3, 2) = 0;           t (3, 3) = 1;</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gada89edf1699e05ecf7355738e9f56f6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gada89edf1699e05ecf7355738e9f56f6b">&#9670;&nbsp;</a></span>getTransformationFromTwoUnitVectors() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Affine3f pcl::getTransformationFromTwoUnitVectors </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>z_axis</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z_axis</td><td>the z-axis </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>transformation the resultant 3D rotation </dd></dl>
<div class="fragment"><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;{</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;  Eigen::Affine3f transformation;</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  <a class="code" href="group__common.html#ga7d1f523f342ff69277f23ea9f02fc5a6">getTransformationFromTwoUnitVectors</a> (y_direction, z_axis, transformation);</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;  <span class="keywordflow">return</span> (transformation);</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga7d1f523f342ff69277f23ea9f02fc5a6"><div class="ttname"><a href="group__common.html#ga7d1f523f342ff69277f23ea9f02fc5a6">pcl::getTransformationFromTwoUnitVectors</a></div><div class="ttdeci">void getTransformationFromTwoUnitVectors(const Eigen::Vector3f &amp;y_direction, const Eigen::Vector3f &amp;z_axis, Eigen::Affine3f &amp;transformation)</div><div class="ttdoc">Get the unique 3D rotation that will rotate z_axis into (0,0,1) and y_direction into a vector with x=...</div><div class="ttdef"><b>Definition:</b> eigen.hpp:634</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7d1f523f342ff69277f23ea9f02fc5a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7d1f523f342ff69277f23ea9f02fc5a6">&#9670;&nbsp;</a></span>getTransformationFromTwoUnitVectors() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTransformationFromTwoUnitVectors </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>z_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z_axis</td><td>the z-axis </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformation</td><td>the resultant 3D rotation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;{</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  <a class="code" href="group__common.html#gaf457d33994792e63129de9709dcdf329">getTransFromUnitVectorsZY</a> (z_axis, y_direction, transformation);</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_gaf457d33994792e63129de9709dcdf329"><div class="ttname"><a href="group__common.html#gaf457d33994792e63129de9709dcdf329">pcl::getTransFromUnitVectorsZY</a></div><div class="ttdeci">void getTransFromUnitVectorsZY(const Eigen::Vector3f &amp;z_axis, const Eigen::Vector3f &amp;y_direction, Eigen::Affine3f &amp;transformation)</div><div class="ttdoc">Get the unique 3D rotation that will rotate z_axis into (0,0,1) and y_direction into a vector with x=...</div><div class="ttdef"><b>Definition:</b> eigen.hpp:582</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4375e99ec2ae368eec9379f506568611"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4375e99ec2ae368eec9379f506568611">&#9670;&nbsp;</a></span>getTransformationFromTwoUnitVectorsAndOrigin()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTransformationFromTwoUnitVectorsAndOrigin </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>z_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>origin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the transformation that will translate <em>orign</em> to (0,0,0) and rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z_axis</td><td>the z-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">origin</td><td>the origin </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transformation</td><td>the resultant transformation matrix </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;{</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  <a class="code" href="group__common.html#ga7d1f523f342ff69277f23ea9f02fc5a6">getTransformationFromTwoUnitVectors</a>(y_direction, z_axis, transformation);</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  Eigen::Vector3f translation = transformation*origin;</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  transformation(0,3)=-translation[0];  transformation(1,3)=-translation[1];  transformation(2,3)=-translation[2];</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga8933c653f39db3636bfbdd262278edcb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8933c653f39db3636bfbdd262278edcb">&#9670;&nbsp;</a></span>getTransFromUnitVectorsXY() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Affine3f pcl::getTransFromUnitVectorsXY </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>x_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>x_axis</em> into (1,0,0) and <em>y_direction</em> into a vector with z=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x_axis</td><td>the x-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the resulting 3D rotation </dd></dl>
<div class="fragment"><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;{</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  Eigen::Affine3f transformation;</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;  <a class="code" href="group__common.html#ga8319aa7921bdc742a9d0f95458e9cfe0">getTransFromUnitVectorsXY</a> (x_axis, y_direction, transformation);</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;  <span class="keywordflow">return</span> (transformation);</div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga8319aa7921bdc742a9d0f95458e9cfe0"><div class="ttname"><a href="group__common.html#ga8319aa7921bdc742a9d0f95458e9cfe0">pcl::getTransFromUnitVectorsXY</a></div><div class="ttdeci">void getTransFromUnitVectorsXY(const Eigen::Vector3f &amp;x_axis, const Eigen::Vector3f &amp;y_direction, Eigen::Affine3f &amp;transformation)</div><div class="ttdoc">Get the unique 3D rotation that will rotate x_axis into (1,0,0) and y_direction into a vector with z=...</div><div class="ttdef"><b>Definition:</b> eigen.hpp:608</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga8319aa7921bdc742a9d0f95458e9cfe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8319aa7921bdc742a9d0f95458e9cfe0">&#9670;&nbsp;</a></span>getTransFromUnitVectorsXY() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTransFromUnitVectorsXY </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>x_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>x_axis</em> into (1,0,0) and <em>y_direction</em> into a vector with z=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x_axis</td><td>the x-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformation</td><td>the resultant 3D rotation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;{</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  Eigen::Vector3f tmp2 = (x_axis.cross(y_direction)).normalized();</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  Eigen::Vector3f tmp1 = (tmp2.cross(x_axis)).normalized();</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;  Eigen::Vector3f tmp0 = x_axis.normalized();</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;  </div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  transformation(0,0)=tmp0[0]; transformation(0,1)=tmp0[1]; transformation(0,2)=tmp0[2]; transformation(0,3)=0.0f;</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;  transformation(1,0)=tmp1[0]; transformation(1,1)=tmp1[1]; transformation(1,2)=tmp1[2]; transformation(1,3)=0.0f;</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  transformation(2,0)=tmp2[0]; transformation(2,1)=tmp2[1]; transformation(2,2)=tmp2[2]; transformation(2,3)=0.0f;</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;  transformation(3,0)=0.0f;    transformation(3,1)=0.0f;    transformation(3,2)=0.0f;    transformation(3,3)=1.0f;</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga58d47eda3c3f5f91125296fd7d202ebb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga58d47eda3c3f5f91125296fd7d202ebb">&#9670;&nbsp;</a></span>getTransFromUnitVectorsZY() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Affine3f pcl::getTransFromUnitVectorsZY </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>z_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">z_axis</td><td>the z-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the resultant 3D rotation </dd></dl>
<div class="fragment"><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;{</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  Eigen::Affine3f transformation;</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;  <a class="code" href="group__common.html#gaf457d33994792e63129de9709dcdf329">getTransFromUnitVectorsZY</a> (z_axis, y_direction, transformation);</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;  <span class="keywordflow">return</span> (transformation);</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf457d33994792e63129de9709dcdf329"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf457d33994792e63129de9709dcdf329">&#9670;&nbsp;</a></span>getTransFromUnitVectorsZY() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTransFromUnitVectorsZY </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>z_axis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>y_direction</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>transformation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the unique 3D rotation that will rotate <em>z_axis</em> into (0,0,1) and <em>y_direction</em> into a vector with x=0 (or into (0,1,0) should <em>y_direction</em> be orthogonal to <em>z_axis</em>) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">z_axis</td><td>the z-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">y_direction</td><td>the y direction </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformation</td><td>the resultant 3D rotation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;{</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  Eigen::Vector3f tmp0 = (y_direction.cross(z_axis)).normalized();</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  Eigen::Vector3f tmp1 = (z_axis.cross(tmp0)).normalized();</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;  Eigen::Vector3f tmp2 = z_axis.normalized();</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  </div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  transformation(0,0)=tmp0[0]; transformation(0,1)=tmp0[1]; transformation(0,2)=tmp0[2]; transformation(0,3)=0.0f;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;  transformation(1,0)=tmp1[0]; transformation(1,1)=tmp1[1]; transformation(1,2)=tmp1[2]; transformation(1,3)=0.0f;</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  transformation(2,0)=tmp2[0]; transformation(2,1)=tmp2[1]; transformation(2,2)=tmp2[2]; transformation(2,3)=0.0f;</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  transformation(3,0)=0.0f;    transformation(3,1)=0.0f;    transformation(3,2)=0.0f;    transformation(3,3)=1.0f;</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3e52d439a979e71096f4dd50f1298f32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3e52d439a979e71096f4dd50f1298f32">&#9670;&nbsp;</a></span>getTranslationAndEulerAngles()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::getTranslationAndEulerAngles </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>z</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>roll</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>pitch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Scalar &amp;&#160;</td>
          <td class="paramname"><em>yaw</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Extract x,y,z and the Euler angles (XYZ-convention) from the given transformation </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>the input transformation matrix </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>the resulting x translation </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>the resulting y translation </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">z</td><td>the resulting z translation </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">roll</td><td>the resulting roll angle </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pitch</td><td>the resulting pitch angle </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">yaw</td><td>the resulting yaw angle </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;{</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;  x = t (0, 3);</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;  y = t (1, 3);</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;  z = t (2, 3);</div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;  roll = atan2 (t (2, 1), t (2, 2));</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;  pitch = asin (-t (2, 0));</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  yaw = atan2 (t (1, 0), t (0, 0));</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga86297c76ef1756ff1db90d8e39c14fa3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga86297c76ef1756ff1db90d8e39c14fa3">&#9670;&nbsp;</a></span>HIK_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::HIK_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the HIK norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  <span class="keywordtype">float</span> norm = 0.0f;</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    norm += (std::min)(a[i], b[i]);</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gad09b0c9a50601f3ae20a7babfd9a8d2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad09b0c9a50601f3ae20a7babfd9a8d2d">&#9670;&nbsp;</a></span>invert2x2()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Matrix::Scalar pcl::invert2x2 </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Matrix &amp;&#160;</td>
          <td class="paramname"><em>inverse</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate the inverse of a 2x2 matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">matrix</td><td>matrix to be inverted </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">inverse</td><td>the resultant inverted matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>only the upper triangular part is taken into account =&gt; non symmetric matrices will give wrong results </dd></dl>
<dl class="section return"><dt>返回</dt><dd>determinant of the original matrix =&gt; if 0 no inverse exists =&gt; result is invalid </dd></dl>
<div class="fragment"><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;{</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  Scalar det = matrix.coeff (0) * matrix.coeff (3) - matrix.coeff (1) * matrix.coeff (2);</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160; </div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  <span class="keywordflow">if</span> (det != 0)</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  {</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <span class="comment">//Scalar inv_det = Scalar (1.0) / det;</span></div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    inverse.coeffRef (0) = matrix.coeff (3);</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    inverse.coeffRef (1) = -matrix.coeff (1);</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    inverse.coeffRef (2) = -matrix.coeff (2);</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    inverse.coeffRef (3) = matrix.coeff (0);</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    inverse /= det;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  }</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="keywordflow">return</span> det;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gabb12d1f85437aafb0a3ac12af5633400"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabb12d1f85437aafb0a3ac12af5633400">&#9670;&nbsp;</a></span>invert3x3Matrix()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Matrix::Scalar pcl::invert3x3Matrix </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Matrix &amp;&#160;</td>
          <td class="paramname"><em>inverse</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate the inverse of a general 3x3 matrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">matrix</td><td>matrix to be inverted </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">inverse</td><td>the resultant inverted matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>determinant of the original matrix =&gt; if 0 no inverse exists =&gt; result is invalid </dd></dl>
<div class="fragment"><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;{</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160; </div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  <span class="comment">//| a b c |-1             |   ie-hf    hc-ib   fb-ec  |</span></div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  <span class="comment">//| d e f |    =  1/det * |   gf-id    ia-gc   dc-fa  |</span></div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="comment">//| g h i |               |   hd-ge    gb-ha   ea-db  |</span></div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;  <span class="comment">//det = a(ie-hf) + d(hc-ib) + g(fb-ec)</span></div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160; </div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  Scalar ie_hf = matrix.coeff (8) * matrix.coeff (4) - matrix.coeff (7) * matrix.coeff (5);</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  Scalar hc_ib = matrix.coeff (7) * matrix.coeff (2) - matrix.coeff (8) * matrix.coeff (1);</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;  Scalar fb_ec = matrix.coeff (5) * matrix.coeff (1) - matrix.coeff (4) * matrix.coeff (2);</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;  Scalar det = matrix.coeff (0) * (ie_hf) + matrix.coeff (3) * (hc_ib) + matrix.coeff (6) * (fb_ec);</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160; </div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;  <span class="keywordflow">if</span> (det != 0)</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;  {</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    inverse.coeffRef (0) = ie_hf;</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    inverse.coeffRef (1) = hc_ib;</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    inverse.coeffRef (2) = fb_ec;</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    inverse.coeffRef (3) = matrix.coeff (6) * matrix.coeff (5) - matrix.coeff (8) * matrix.coeff (3);</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    inverse.coeffRef (4) = matrix.coeff (8) * matrix.coeff (0) - matrix.coeff (6) * matrix.coeff (2);</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    inverse.coeffRef (5) = matrix.coeff (3) * matrix.coeff (2) - matrix.coeff (5) * matrix.coeff (0);</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    inverse.coeffRef (6) = matrix.coeff (7) * matrix.coeff (3) - matrix.coeff (6) * matrix.coeff (4);</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    inverse.coeffRef (7) = matrix.coeff (6) * matrix.coeff (1) - matrix.coeff (7) * matrix.coeff (0);</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    inverse.coeffRef (8) = matrix.coeff (4) * matrix.coeff (0) - matrix.coeff (3) * matrix.coeff (1);</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160; </div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    inverse /= det;</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  }</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <span class="keywordflow">return</span> det;</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga503f55a565c260660c6ac0461f17fa8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga503f55a565c260660c6ac0461f17fa8f">&#9670;&nbsp;</a></span>invert3x3SymMatrix()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Matrix &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Matrix::Scalar pcl::invert3x3SymMatrix </td>
          <td>(</td>
          <td class="paramtype">const Matrix &amp;&#160;</td>
          <td class="paramname"><em>matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Matrix &amp;&#160;</td>
          <td class="paramname"><em>inverse</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Calculate the inverse of a 3x3 symmetric matrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">matrix</td><td>matrix to be inverted </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">inverse</td><td>the resultant inverted matrix </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>only the upper triangular part is taken into account =&gt; non symmetric matrices will give wrong results </dd></dl>
<dl class="section return"><dt>返回</dt><dd>determinant of the original matrix =&gt; if 0 no inverse exists =&gt; result is invalid </dd></dl>
<div class="fragment"><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;{</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> Matrix::Scalar Scalar;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;  <span class="comment">// elements</span></div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  <span class="comment">// a b c</span></div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  <span class="comment">// b d e</span></div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  <span class="comment">// c e f</span></div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="comment">//| a b c |-1             |   fd-ee    ce-bf   be-cd  |</span></div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  <span class="comment">//| b d e |    =  1/det * |   ce-bf    af-cc   bc-ae  |</span></div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="comment">//| c e f |               |   be-cd    bc-ae   ad-bb  |</span></div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160; </div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  <span class="comment">//det = a(fd-ee) + b(ec-fb) + c(eb-dc)</span></div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160; </div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  Scalar fd_ee = matrix.coeff (4) * matrix.coeff (8) - matrix.coeff (7) * matrix.coeff (5);</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  Scalar ce_bf = matrix.coeff (2) * matrix.coeff (5) - matrix.coeff (1) * matrix.coeff (8);</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;  Scalar be_cd = matrix.coeff (1) * matrix.coeff (5) - matrix.coeff (2) * matrix.coeff (4);</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160; </div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  Scalar det = matrix.coeff (0) * fd_ee + matrix.coeff (1) * ce_bf + matrix.coeff (2) * be_cd;</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160; </div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <span class="keywordflow">if</span> (det != 0)</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  {</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="comment">//Scalar inv_det = Scalar (1.0) / det;</span></div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    inverse.coeffRef (0) = fd_ee;</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    inverse.coeffRef (1) = inverse.coeffRef (3) = ce_bf;</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    inverse.coeffRef (2) = inverse.coeffRef (6) = be_cd;</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    inverse.coeffRef (4) = (matrix.coeff (0) * matrix.coeff (8) - matrix.coeff (2) * matrix.coeff (2));</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    inverse.coeffRef (5) = inverse.coeffRef (7) = (matrix.coeff (1) * matrix.coeff (2) - matrix.coeff (0) * matrix.coeff (5));</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    inverse.coeffRef (8) = (matrix.coeff (0) * matrix.coeff (4) - matrix.coeff (1) * matrix.coeff (1));</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    inverse /= det;</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  }</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keywordflow">return</span> det;</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga45baeaeb21308cd128a7c44ab786552c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga45baeaeb21308cd128a7c44ab786552c">&#9670;&nbsp;</a></span>JM_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::JM_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the JM norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;{</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    norm += (std::sqrt (a[i]) - std::sqrt (b[i])) * (std::sqrt (a[i]) - std::sqrt (b[i]));</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordflow">return</span> std::sqrt (norm);</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4df86a6dafef9778fb8df865ad54e28f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4df86a6dafef9778fb8df865ad54e28f">&#9670;&nbsp;</a></span>K_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::K_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>P1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>P2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the K norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
    <tr><td class="paramname">P1</td><td>the first parameter </td></tr>
    <tr><td class="paramname">P2</td><td>the second parameter </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;{</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    norm += fabsf (P1 * a[i] - P2 * b[i]);</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga186a26b9face0cfb0fea3d6eb37f909b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga186a26b9face0cfb0fea3d6eb37f909b">&#9670;&nbsp;</a></span>KL_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::KL_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the KL between two discrete probability density functions </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first discrete PDF </td></tr>
    <tr><td class="paramname">B</td><td>the second discrete PDF </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;{</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">if</span> ( (b[i] != 0) &amp;&amp; ((a[i] / b[i]) &gt; 0) )</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      norm += a[i] * logf (a[i] / b[i]);</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      norm += 0;</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga61d1e988b461de40a26b4e4e9e93ce55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga61d1e988b461de40a26b4e4e9e93ce55">&#9670;&nbsp;</a></span>L1_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::L1_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the L1 norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="keywordtype">float</span> norm = 0.0f;</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    norm += fabsf(a[i] - b[i]);</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga70456fbb6c67cf3c1229e19c831b30ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga70456fbb6c67cf3c1229e19c831b30ac">&#9670;&nbsp;</a></span>L2_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::L2_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the L2 norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;{</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keywordflow">return</span> std::sqrt (<a class="code" href="group__common.html#gaf034c4bca3fc85c1e6d27d893c2936a5">L2_Norm_SQR</a>(a, b, dim));</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_gaf034c4bca3fc85c1e6d27d893c2936a5"><div class="ttname"><a href="group__common.html#gaf034c4bca3fc85c1e6d27d893c2936a5">pcl::L2_Norm_SQR</a></div><div class="ttdeci">float L2_Norm_SQR(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the squared L2 norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:97</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf034c4bca3fc85c1e6d27d893c2936a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf034c4bca3fc85c1e6d27d893c2936a5">&#9670;&nbsp;</a></span>L2_Norm_SQR()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::L2_Norm_SQR </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the squared L2 norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;{</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  {</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordtype">float</span> diff  =  a[i] - b[i];</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    norm += diff*diff;</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4ee346a92c01c042ffae2907ae5c93c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4ee346a92c01c042ffae2907ae5c93c5">&#9670;&nbsp;</a></span>lineToLineSegment()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">PCL_EXPORTS void pcl::lineToLineSegment </td>
          <td>(</td>
          <td class="paramtype">const Eigen::VectorXf &amp;&#160;</td>
          <td class="paramname"><em>line_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::VectorXf &amp;&#160;</td>
          <td class="paramname"><em>line_b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pt1_seg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pt2_seg</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the shortest 3D segment between two 3D lines </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">line_a</td><td>the coefficients of the first line (point, direction) </td></tr>
    <tr><td class="paramname">line_b</td><td>the coefficients of the second line (point, direction) </td></tr>
    <tr><td class="paramname">pt1_seg</td><td>the first point on the line segment </td></tr>
    <tr><td class="paramname">pt2_seg</td><td>the second point on the line segment </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3">&#9670;&nbsp;</a></span>lineWithLineIntersection() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool pcl::lineWithLineIntersection </td>
          <td>(</td>
          <td class="paramtype">const Eigen::VectorXf &amp;&#160;</td>
          <td class="paramname"><em>line_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::VectorXf &amp;&#160;</td>
          <td class="paramname"><em>line_b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>sqr_eps</em> = <code>1e-4</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the intersection of a two 3D lines in space as a 3D point </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">line_a</td><td>the coefficients of the first line (point, direction) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">line_b</td><td>the coefficients of the second line (point, direction) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">point</td><td>holder for the computed 3D point </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">sqr_eps</td><td>maximum allowable squared distance to the true solution </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  Eigen::Vector4f p1, p2;</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <a class="code" href="group__common.html#ga4ee346a92c01c042ffae2907ae5c93c5">lineToLineSegment</a> (line_a, line_b, p1, p2);</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="comment">// If the segment size is smaller than a pre-given epsilon...</span></div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <span class="keywordtype">double</span> sqr_dist = (p1 - p2).squaredNorm ();</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keywordflow">if</span> (sqr_dist &lt; sqr_eps)</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  {</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    point = p1;</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  }</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  point.setZero ();</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga4ee346a92c01c042ffae2907ae5c93c5"><div class="ttname"><a href="group__common.html#ga4ee346a92c01c042ffae2907ae5c93c5">pcl::lineToLineSegment</a></div><div class="ttdeci">PCL_EXPORTS void lineToLineSegment(const Eigen::VectorXf &amp;line_a, const Eigen::VectorXf &amp;line_b, Eigen::Vector4f &amp;pt1_seg, Eigen::Vector4f &amp;pt2_seg)</div><div class="ttdoc">Get the shortest 3D segment between two 3D lines</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga9b79c559e12f4aacb41825f8b43840c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9b79c559e12f4aacb41825f8b43840c2">&#9670;&nbsp;</a></span>lineWithLineIntersection() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool pcl::lineWithLineIntersection </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_model_coefficients.html">pcl::ModelCoefficients</a> &amp;&#160;</td>
          <td class="paramname"><em>line_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_model_coefficients.html">pcl::ModelCoefficients</a> &amp;&#160;</td>
          <td class="paramname"><em>line_b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>sqr_eps</em> = <code>1e-4</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the intersection of a two 3D lines in space as a 3D point </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">line_a</td><td>the coefficients of the first line (point, direction) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">line_b</td><td>the coefficients of the second line (point, direction) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">point</td><td>holder for the computed 3D point </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">sqr_eps</td><td>maximum allowable squared distance to the true solution </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  Eigen::VectorXf coeff1 = Eigen::VectorXf::Map (&amp;line_a.values[0], line_a.values.size ());</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  Eigen::VectorXf coeff2 = Eigen::VectorXf::Map (&amp;line_b.values[0], line_b.values.size ());</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3">lineWithLineIntersection</a> (coeff1, coeff2, point, sqr_eps));</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3"><div class="ttname"><a href="group__common.html#ga64a4ea9a06fdb7a2ec3eda06b1b5a6e3">pcl::lineWithLineIntersection</a></div><div class="ttdeci">PCL_EXPORTS bool lineWithLineIntersection(const Eigen::VectorXf &amp;line_a, const Eigen::VectorXf &amp;line_b, Eigen::Vector4f &amp;point, double sqr_eps=1e-4)</div><div class="ttdoc">Get the intersection of a two 3D lines in space as a 3D point</div><div class="ttdef"><b>Definition:</b> intersections.hpp:47</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga63fded8c9593744836d761940cab9350"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga63fded8c9593744836d761940cab9350">&#9670;&nbsp;</a></span>Linf_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::Linf_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the L-infinity norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;{</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    norm = (std::max)(fabsf(a[i] - b[i]), norm);</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga5281205532955d384c8aa22ff4ff5e80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5281205532955d384c8aa22ff4ff5e80">&#9670;&nbsp;</a></span>loadBinary()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::loadBinary </td>
          <td>(</td>
          <td class="paramtype">Eigen::MatrixBase&lt; Derived &gt; const &amp;&#160;</td>
          <td class="paramname"><em>matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::istream &amp;&#160;</td>
          <td class="paramname"><em>file</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Read a matrix from an input stream </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">matrix</td><td>the resulting matrix, read from the input stream </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">file</td><td>the input stream </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;{</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;  Eigen::MatrixBase&lt;Derived&gt; &amp;matrix = <span class="keyword">const_cast&lt;</span>Eigen::MatrixBase&lt;Derived&gt; &amp;<span class="keyword">&gt;</span> (matrix_);</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160; </div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  uint32_t rows, cols;</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;  file.read (<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;rows), <span class="keyword">sizeof</span> (rows));</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  file.read (<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;cols), <span class="keyword">sizeof</span> (cols));</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  <span class="keywordflow">if</span> (matrix.rows () != <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(rows) || matrix.cols () != <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(cols))</div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    matrix.derived().resize(rows, cols);</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;  </div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; rows; ++i)</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="keywordflow">for</span> (uint32_t j = 0; j &lt; cols; ++j)</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    {</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;      <span class="keyword">typename</span> Derived::Scalar tmp;</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;      file.read (<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;tmp), <span class="keyword">sizeof</span> (tmp));</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;      matrix (i, j) = tmp;</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    }</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3b37d5c19b2773954bbc5320f011f3ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3b37d5c19b2773954bbc5320f011f3ec">&#9670;&nbsp;</a></span>normAngle()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::normAngle </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>alpha</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Normalize an angle to (-PI, PI] </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">alpha</td><td>the input angle (in radians) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  {</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keywordflow">return</span> (alpha &gt;= 0  ? </div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        fmodf (alpha + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI), </div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;               2.0f * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI)) </div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        - <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI) </div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        : </div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        -(fmodf (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI) - alpha, </div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;                 2.0f * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI)) </div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        - <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_PI)));</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf977fbc818d41de61285d1da0521991a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf977fbc818d41de61285d1da0521991a">&#9670;&nbsp;</a></span>PF_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::PF_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>P1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>P2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the PF norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
    <tr><td class="paramname">P1</td><td>the first parameter </td></tr>
    <tr><td class="paramname">P2</td><td>the second parameter </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;{</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    norm += (P1 * a[i] - P2 * b[i]) * (P1 * a[i] - P2 * b[i]);</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keywordflow">return</span> std::sqrt (norm);</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga997c583b8ac57ffa9ad9e7321b4673e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga997c583b8ac57ffa9ad9e7321b4673e5">&#9670;&nbsp;</a></span>rad2deg() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::rad2deg </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>alpha</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert an angle from radians to degrees </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">alpha</td><td>the input angle (in radians) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  {</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">return</span> (alpha * 57.29578);</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3177c2c084674693cc38f03e80b6ad77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3177c2c084674693cc38f03e80b6ad77">&#9670;&nbsp;</a></span>rad2deg() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::rad2deg </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>alpha</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert an angle from radians to degrees </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">alpha</td><td>the input angle (in radians) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  {</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keywordflow">return</span> (alpha * 57.29578f);</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gacc18ebcacd806fd0c9336fe2f8b7208c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacc18ebcacd806fd0c9336fe2f8b7208c">&#9670;&nbsp;</a></span>saveBinary()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::saveBinary </td>
          <td>(</td>
          <td class="paramtype">const Eigen::MatrixBase&lt; Derived &gt; &amp;&#160;</td>
          <td class="paramname"><em>matrix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>file</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a matrix to an output stream </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">matrix</td><td>the matrix to output </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">file</td><td>the output stream </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;{</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;  uint32_t rows = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (matrix.rows ()), cols = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (matrix.cols ());</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;  file.write (<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;rows), <span class="keyword">sizeof</span> (rows));</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;  file.write (<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;cols), <span class="keyword">sizeof</span> (cols));</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; rows; ++i)</div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keywordflow">for</span> (uint32_t j = 0; j &lt; cols; ++j)</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    {</div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;      <span class="keyword">typename</span> Derived::Scalar tmp = matrix(i,j);</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;      file.write (<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;tmp), <span class="keyword">sizeof</span> (tmp));</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    }</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga047d812778a099ab333c847342c4b6bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga047d812778a099ab333c847342c4b6bf">&#9670;&nbsp;</a></span>selectNorm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::selectNorm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__common.html#ga9d37f00989a9de11b48deb263649463c">NormType</a>&#160;</td>
          <td class="paramname"><em>norm_type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Method that calculates any norm type available, based on the norm_type variable </p>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="comment">// {L1, L2_SQR, L2, LINF, JM, B, SUBLINEAR, CS, DIV, PF, K, KL, HIK};</span></div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keywordflow">switch</span> (norm_type)</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  {</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">case</span> (L1):</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga61d1e988b461de40a26b4e4e9e93ce55">L1_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">case</span> (L2_SQR):</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#gaf034c4bca3fc85c1e6d27d893c2936a5">L2_Norm_SQR</a> (a, b, dim);</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">case</span> (L2):</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga70456fbb6c67cf3c1229e19c831b30ac">L2_Norm</a>  (a, b, dim);</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordflow">case</span> (LINF):</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga63fded8c9593744836d761940cab9350">Linf_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">case</span> (JM):</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga45baeaeb21308cd128a7c44ab786552c">JM_Norm</a>  (a, b, dim);</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">case</span> (B):</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga0eb2818b6fa817f3ada41296793283a1">B_Norm</a>  (a, b, dim);</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">case</span> (SUBLINEAR):</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#gac986c55a5b8850fec89cd26c46303747">Sublinear_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">case</span> (CS):</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga7e43f6ae7f0607bfdedaea512c510ff8">CS_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordflow">case</span> (DIV):</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#gae8b5c722d30c22652327a1481528224e">Div_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">case</span> (KL):</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga186a26b9face0cfb0fea3d6eb37f909b">KL_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordflow">case</span> (HIK):</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__common.html#ga86297c76ef1756ff1db90d8e39c14fa3">HIK_Norm</a> (a, b, dim);</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">case</span> (PF):</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keywordflow">case</span> (K):</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;      PCL_ERROR (<span class="stringliteral">&quot;[pcl::selectNorm] For PF and K norms you have to explicitly call the method, as they need additional parameters\n&quot;</span>);</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  }</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga0eb2818b6fa817f3ada41296793283a1"><div class="ttname"><a href="group__common.html#ga0eb2818b6fa817f3ada41296793283a1">pcl::B_Norm</a></div><div class="ttdeci">float B_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the B norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:139</div></div>
<div class="ttc" id="agroup__common_html_ga186a26b9face0cfb0fea3d6eb37f909b"><div class="ttname"><a href="group__common.html#ga186a26b9face0cfb0fea3d6eb37f909b">pcl::KL_Norm</a></div><div class="ttdeci">float KL_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the KL between two discrete probability density functions</div><div class="ttdef"><b>Definition:</b> norms.hpp:218</div></div>
<div class="ttc" id="agroup__common_html_ga45baeaeb21308cd128a7c44ab786552c"><div class="ttname"><a href="group__common.html#ga45baeaeb21308cd128a7c44ab786552c">pcl::JM_Norm</a></div><div class="ttdeci">float JM_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the JM norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:127</div></div>
<div class="ttc" id="agroup__common_html_ga61d1e988b461de40a26b4e4e9e93ce55"><div class="ttname"><a href="group__common.html#ga61d1e988b461de40a26b4e4e9e93ce55">pcl::L1_Norm</a></div><div class="ttdeci">float L1_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the L1 norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:87</div></div>
<div class="ttc" id="agroup__common_html_ga63fded8c9593744836d761940cab9350"><div class="ttname"><a href="group__common.html#ga63fded8c9593744836d761940cab9350">pcl::Linf_Norm</a></div><div class="ttdeci">float Linf_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the L-infinity norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:117</div></div>
<div class="ttc" id="agroup__common_html_ga70456fbb6c67cf3c1229e19c831b30ac"><div class="ttname"><a href="group__common.html#ga70456fbb6c67cf3c1229e19c831b30ac">pcl::L2_Norm</a></div><div class="ttdeci">float L2_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the L2 norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:110</div></div>
<div class="ttc" id="agroup__common_html_ga7e43f6ae7f0607bfdedaea512c510ff8"><div class="ttname"><a href="group__common.html#ga7e43f6ae7f0607bfdedaea512c510ff8">pcl::CS_Norm</a></div><div class="ttdeci">float CS_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the CS norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:168</div></div>
<div class="ttc" id="agroup__common_html_ga86297c76ef1756ff1db90d8e39c14fa3"><div class="ttname"><a href="group__common.html#ga86297c76ef1756ff1db90d8e39c14fa3">pcl::HIK_Norm</a></div><div class="ttdeci">float HIK_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the HIK norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:232</div></div>
<div class="ttc" id="agroup__common_html_gac986c55a5b8850fec89cd26c46303747"><div class="ttname"><a href="group__common.html#gac986c55a5b8850fec89cd26c46303747">pcl::Sublinear_Norm</a></div><div class="ttdeci">float Sublinear_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the sublinear norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:156</div></div>
<div class="ttc" id="agroup__common_html_gae8b5c722d30c22652327a1481528224e"><div class="ttname"><a href="group__common.html#gae8b5c722d30c22652327a1481528224e">pcl::Div_Norm</a></div><div class="ttdeci">float Div_Norm(FloatVectorT a, FloatVectorT b, int dim)</div><div class="ttdoc">Compute the div norm of the vector between two points</div><div class="ttdef"><b>Definition:</b> norms.hpp:182</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gad9217ecd4cc14221f178af07a16ef75d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad9217ecd4cc14221f178af07a16ef75d">&#9670;&nbsp;</a></span>sqrPointToLineDistance() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::sqrPointToLineDistance </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>line_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>line_dir</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the square distance from a point to a line (represented by a point and a direction) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">pt</td><td>a point </td></tr>
    <tr><td class="paramname">line_pt</td><td>a point on the line (make sure that line_pt[3] = 0 as there are no internal checks!) </td></tr>
    <tr><td class="paramname">line_dir</td><td>the line direction </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  {</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="comment">// Calculate the distance from the point to the line</span></div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="comment">// D = ||(P2-P1) x (P1-P0)|| / ||P2-P1|| = norm (cross (p2-p1, p1-p0)) / norm(p2-p1)</span></div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">return</span> (line_dir.cross3 (line_pt - pt)).squaredNorm () / line_dir.squaredNorm ();</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3d6aa7accd68832e8a4d4707c358e40f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3d6aa7accd68832e8a4d4707c358e40f">&#9670;&nbsp;</a></span>sqrPointToLineDistance() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double pcl::sqrPointToLineDistance </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>line_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>line_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>sqr_length</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the square distance from a point to a line (represented by a point and a direction) </p>
<dl class="section note"><dt>注解</dt><dd>This one is useful if one has to compute many distances to a fixed line, so the vector length can be pre-computed </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">pt</td><td>a point </td></tr>
    <tr><td class="paramname">line_pt</td><td>a point on the line (make sure that line_pt[3] = 0 as there are no internal checks!) </td></tr>
    <tr><td class="paramname">line_dir</td><td>the line direction </td></tr>
    <tr><td class="paramname">sqr_length</td><td>the squared norm of the line direction </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  {</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="comment">// Calculate the distance from the point to the line</span></div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="comment">// D = ||(P2-P1) x (P1-P0)|| / ||P2-P1|| = norm (cross (p2-p1, p1-p0)) / norm(p2-p1)</span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordflow">return</span> (line_dir.cross3 (line_pt - pt)).squaredNorm () / sqr_length;</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gac986c55a5b8850fec89cd26c46303747"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac986c55a5b8850fec89cd26c46303747">&#9670;&nbsp;</a></span>Sublinear_Norm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatVectorT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float pcl::Sublinear_Norm </td>
          <td>(</td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FloatVectorT&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute the sublinear norm of the vector between two points </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>the first point </td></tr>
    <tr><td class="paramname">B</td><td>the second point </td></tr>
    <tr><td class="paramname">dim</td><td>the number of dimensions in <em>A</em> and <em>B</em> (dimensions must match) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>FloatVectorT is any type of vector with its values accessible via [ ] </dd></dl>
<div class="fragment"><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;{</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="keywordtype">float</span> norm = 0.0;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dim; ++i)</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    norm += std::sqrt (fabsf (a[i] - b[i]));</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160; </div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  <span class="keywordflow">return</span> norm;</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga4bb19421457db739a96fe4eacf620139"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4bb19421457db739a96fe4eacf620139">&#9670;&nbsp;</a></span>swapByte()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;std::size_t N&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::io::swapByte </td>
          <td>(</td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>bytes</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>swap bytes order of a char array of length N </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">bytes</td><td>char array to swap </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga1bd2c5ea1258af3a45483dd1341aa429"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1bd2c5ea1258af3a45483dd1341aa429">&#9670;&nbsp;</a></span>transformPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> pcl::transformPoint </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Transform a point with members x,y,z </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">point</td><td>the point to transform </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transform</td><td>the transformation to apply </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the transformed point </dd></dl>
<div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;{</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> ret = point;</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  ret.getVector3fMap () = transform * point.getVector3fMap ();</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  <span class="keywordflow">return</span> (ret);</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga033e051c786ec84f52598ab711a74a4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga033e051c786ec84f52598ab711a74a4e">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[1/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply a rigid transform defined by a 4x4 matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>a rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  {</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="keywordflow">return</span> (transformPointCloud&lt;PointT, Scalar&gt; (cloud_in, indices.indices, cloud_out, transform, copy_all_fields));</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaa9afb23505913d26d9a1f06242d8eefa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa9afb23505913d26d9a1f06242d8eefa">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[2/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply an affine transform defined by an Eigen Transform </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">return</span> (transformPointCloud&lt;PointT, Scalar&gt; (cloud_in, indices.indices, cloud_out, transform, copy_all_fields));</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf18e63375b760f7030ee1e96a1d10261"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf18e63375b760f7030ee1e96a1d10261">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[3/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply a rigid transform defined by a 4x4 matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>a rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  {</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (transform);</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">return</span> (transformPointCloud&lt;PointT, Scalar&gt; (cloud_in, indices, cloud_out, t, copy_all_fields));</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga76dfccbfb85ec0b318be578916cd4036"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga76dfccbfb85ec0b318be578916cd4036">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[4/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply an affine transform defined by an Eigen Transform </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;{</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="keywordtype">size_t</span> npts = indices.size ();</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="comment">// In order to transform the data, we need to remove NaNs</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (npts);</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = 1;</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (npts);</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>      = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="keywordflow">if</span> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  {</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="comment">// If the dataset is dense, simply transform it!</span></div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; npts; ++i)</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;      <span class="comment">// Copy fields first, then transform xyz data</span></div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      <span class="keywordflow">if</span> (copy_all_fields)</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]];</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      <span class="comment">//cloud_out.points[i].getVector3fMap () = transform*cloud_out.points[i].getVector3fMap ();</span></div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      Eigen::Matrix&lt;Scalar, 3, 1&gt; pt (cloud_in[indices[i]].x, cloud_in[indices[i]].y, cloud_in[indices[i]].z);</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      cloud_out[i].x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (0, 0) * pt.coeffRef (0) + transform (0, 1) * pt.coeffRef (1) + transform (0, 2) * pt.coeffRef (2) + transform (0, 3));</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      cloud_out[i].y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (1, 0) * pt.coeffRef (0) + transform (1, 1) * pt.coeffRef (1) + transform (1, 2) * pt.coeffRef (2) + transform (1, 3));</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      cloud_out[i].z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (2, 0) * pt.coeffRef (0) + transform (2, 1) * pt.coeffRef (1) + transform (2, 2) * pt.coeffRef (2) + transform (2, 3));</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    }</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  }</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  {</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="comment">// Dataset might contain NaNs and Infs, so check for them first,</span></div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="comment">// otherwise we get errors during the multiplication (?)</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; npts; ++i)</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    {</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      <span class="keywordflow">if</span> (copy_all_fields)</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i] = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]];</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].x) || </div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;          !pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].y) || </div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;          !pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices[i]].z))</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;      <span class="comment">//cloud_out.points[i].getVector3fMap () = transform*cloud_out.points[i].getVector3fMap ();</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      Eigen::Matrix&lt;Scalar, 3, 1&gt; pt (cloud_in[indices[i]].x, cloud_in[indices[i]].y, cloud_in[indices[i]].z);</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      cloud_out[i].x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (0, 0) * pt.coeffRef (0) + transform (0, 1) * pt.coeffRef (1) + transform (0, 2) * pt.coeffRef (2) + transform (0, 3));</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      cloud_out[i].y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (1, 0) * pt.coeffRef (0) + transform (1, 1) * pt.coeffRef (1) + transform (1, 2) * pt.coeffRef (2) + transform (1, 3));</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      cloud_out[i].z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (2, 0) * pt.coeffRef (0) + transform (2, 1) * pt.coeffRef (1) + transform (2, 2) * pt.coeffRef (2) + transform (2, 3));</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    }</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  }</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="gaff524851ffbcbefdbef2277134382906"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaff524851ffbcbefdbef2277134382906">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[5/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 3, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Quaternion&lt; Scalar &gt; &amp;&#160;</td>
          <td class="paramname"><em>rotation</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Apply a rigid transform defined by a 3D offset and a quaternion </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the translation component of the rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">rotation</td><td>the rotation component of the rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;{</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  Eigen::Translation&lt;Scalar, 3&gt; translation (offset);</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  <span class="comment">// Assemble an Eigen Transform</span></div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (translation * rotation);</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">transformPointCloud</a> (cloud_in, cloud_out, t, copy_all_fields);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga52d532f7f2b4d7bba78d13701d3a33d8"><div class="ttname"><a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a></div><div class="ttdeci">void transformPointCloud(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Apply an affine transform defined by an Eigen Transform</div><div class="ttdef"><b>Definition:</b> transforms.hpp:42</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gac841d05d13c925f3a3a8090d9d7ff24d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac841d05d13c925f3a3a8090d9d7ff24d">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[6/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply a rigid transform defined by a 4x4 matrix </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>a rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Can be used with cloud_in equal to cloud_out </dd></dl>
<div class="fragment"><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  {</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (transform);</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">return</span> (transformPointCloud&lt;PointT, Scalar&gt; (cloud_in, cloud_out, t, copy_all_fields));</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga52d532f7f2b4d7bba78d13701d3a33d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga52d532f7f2b4d7bba78d13701d3a33d8">&#9670;&nbsp;</a></span>transformPointCloud() <span class="overload">[7/7]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloud </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Apply an affine transform defined by an Eigen Transform </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Can be used with cloud_in equal to cloud_out </dd></dl>
<div class="fragment"><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;{</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="keywordflow">if</span> (&amp;cloud_in != &amp;cloud_out)</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  {</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>;</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>    = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>   = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.reserve (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">if</span> (copy_all_fields)</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;      cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.assign (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.begin (), cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.end ());</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a> = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a5de17e88bdf15e1c4fd1bcc6b85b1941">sensor_orientation_</a>;</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>      = cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#aad7c2cd4b0d1c7f0fbc096276b5e2230">sensor_origin_</a>;</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  }</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">if</span> (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a>)</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  {</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="comment">// If the dataset is dense, simply transform it!</span></div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    {</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="comment">//cloud_out.points[i].getVector3fMap () = transform * cloud_in.points[i].getVector3fMap ();</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      Eigen::Matrix&lt;Scalar, 3, 1&gt; pt (cloud_in[i].x, cloud_in[i].y, cloud_in[i].z);</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;      cloud_out[i].x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (0, 0) * pt.coeffRef (0) + transform (0, 1) * pt.coeffRef (1) + transform (0, 2) * pt.coeffRef (2) + transform (0, 3));</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;      cloud_out[i].y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (1, 0) * pt.coeffRef (0) + transform (1, 1) * pt.coeffRef (1) + transform (1, 2) * pt.coeffRef (2) + transform (1, 3));</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      cloud_out[i].z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (2, 0) * pt.coeffRef (0) + transform (2, 1) * pt.coeffRef (1) + transform (2, 2) * pt.coeffRef (2) + transform (2, 3));</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    }</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  }</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  {</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="comment">// Dataset might contain NaNs and Infs, so check for them first,</span></div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="comment">// otherwise we get errors during the multiplication (?)</span></div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud_out.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    {</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x) || </div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;          !pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y) || </div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;          !pcl_isfinite (cloud_in.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z))</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;      <span class="comment">//cloud_out.points[i].getVector3fMap () = transform * cloud_in.points[i].getVector3fMap ();</span></div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;      Eigen::Matrix&lt;Scalar, 3, 1&gt; pt (cloud_in[i].x, cloud_in[i].y, cloud_in[i].z);</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      cloud_out[i].x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (0, 0) * pt.coeffRef (0) + transform (0, 1) * pt.coeffRef (1) + transform (0, 2) * pt.coeffRef (2) + transform (0, 3));</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      cloud_out[i].y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (1, 0) * pt.coeffRef (0) + transform (1, 1) * pt.coeffRef (1) + transform (1, 2) * pt.coeffRef (2) + transform (1, 3));</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;      cloud_out[i].z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (transform (2, 0) * pt.coeffRef (0) + transform (2, 1) * pt.coeffRef (1) + transform (2, 2) * pt.coeffRef (2) + transform (2, 3));</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    }</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  }</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga3a78021ef33dad9e3d44e6275768760b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3a78021ef33dad9e3d44e6275768760b">&#9670;&nbsp;</a></span>transformPointCloudWithNormals() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloudWithNormals </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Transform a point cloud and rotate its normals using an Eigen transform. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z, normal_x, normal_y, normal_z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Can be used with cloud_in equal to cloud_out </dd></dl>
<div class="fragment"><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  {</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (transform);</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keywordflow">return</span> (transformPointCloudWithNormals&lt;PointT, Scalar&gt; (cloud_in, indices, cloud_out, t, copy_all_fields));</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="gae4ec94bbea2388f1399bccc96d3724ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae4ec94bbea2388f1399bccc96d3724ee">&#9670;&nbsp;</a></span>transformPointCloudWithNormals() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloudWithNormals </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Transform a point cloud and rotate its normals using an Eigen transform. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the set of point indices to use from the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z, normal_x, normal_y, normal_z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Can be used with cloud_in equal to cloud_out </dd></dl>
<div class="fragment"><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  {</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (transform);</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordflow">return</span> (transformPointCloudWithNormals&lt;PointT, Scalar&gt; (cloud_in, indices, cloud_out, t, copy_all_fields));</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga1d67c0cd4ebb26d770c338d93884974a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1d67c0cd4ebb26d770c338d93884974a">&#9670;&nbsp;</a></span>transformPointCloudWithNormals() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloudWithNormals </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 3, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Quaternion&lt; Scalar &gt; &amp;&#160;</td>
          <td class="paramname"><em>rotation</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Transform a point cloud and rotate its normals using an Eigen transform. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the translation component of the rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">rotation</td><td>the rotation component of the rigid transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z, normal_x, normal_y, normal_z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;{</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  Eigen::Translation&lt;Scalar, 3&gt; translation (offset);</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  <span class="comment">// Assemble an Eigen Transform</span></div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (translation * rotation);</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  <a class="code" href="group__common.html#ga01dcf9e24dec3109a0c8a8b8f2e24bcc">transformPointCloudWithNormals</a> (cloud_in, cloud_out, t, copy_all_fields);</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga01dcf9e24dec3109a0c8a8b8f2e24bcc"><div class="ttname"><a href="group__common.html#ga01dcf9e24dec3109a0c8a8b8f2e24bcc">pcl::transformPointCloudWithNormals</a></div><div class="ttdeci">void transformPointCloudWithNormals(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Transform a point cloud and rotate its normals using an Eigen transform.</div><div class="ttdef"><b>Definition:</b> transforms.h:307</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga01dcf9e24dec3109a0c8a8b8f2e24bcc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga01dcf9e24dec3109a0c8a8b8f2e24bcc">&#9670;&nbsp;</a></span>transformPointCloudWithNormals() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void pcl::transformPointCloudWithNormals </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix&lt; Scalar, 4, 4 &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>copy_all_fields</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Transform a point cloud and rotate its normals using an Eigen transform. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud_in</td><td>the input point cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud_out</td><td>the resultant output point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">transform</td><td>an affine transformation (typically a rigid transformation) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">copy_all_fields</td><td>flag that controls whether the contents of the fields (other than x, y, z, normal_x, normal_y, normal_z) should be copied into the new transformed cloud </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Can be used with cloud_in equal to cloud_out </dd></dl>
<div class="fragment"><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  {</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    Eigen::Transform&lt;Scalar, 3, Eigen::Affine&gt; t (transform);</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="keywordflow">return</span> (transformPointCloudWithNormals&lt;PointT, Scalar&gt; (cloud_in, cloud_out, t, copy_all_fields));</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ga6eddef43d5bd5211fcbd774c87962314"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6eddef43d5bd5211fcbd774c87962314">&#9670;&nbsp;</a></span>transformPointWithNormal()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT , typename Scalar &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> pcl::transformPointWithNormal </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;&#160;</td>
          <td class="paramname"><em>point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;&#160;</td>
          <td class="paramname"><em>transform</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Transform a point with members x,y,z,normal_x,normal_y,normal_z </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">point</td><td>the point to transform </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transform</td><td>the transformation to apply </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>the transformed point </dd></dl>
<div class="fragment"><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;{</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> ret = point;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;  ret.getVector3fMap () = transform * point.getVector3fMap ();</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  ret.getNormalVector3fMap () = transform.rotation () * point.getNormalVector3fMap ();</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  <span class="keywordflow">return</span> (ret);</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
